Jump to content

caovillanueva

Members
  • Posts

    20
  • Joined

  • Last visited

Profile Information

  • First Name
    CAo
  • Last Name
    Villa

Recent Profile Visitors

399 profile views

caovillanueva's Achievements

Rookie

Rookie (2/14)

  • First Post Rare
  • Collaborator Rare
  • Dedicated Rare
  • Week One Done Rare
  • One Month Later Rare

Recent Badges

3

Reputation

  1. Nevermind, in my case its was a custom module issue., thanks for your help anyway
  2. No, its a fresh copy, i get the same error using PS 8.1.4 and using the theme Warehouse. LEt me try with classic
  3. Apparently this is the bug: https://github.com/PrestaShop/PrestaShop/issues/30147
  4. PHP Fatal error: Uncaught ErrorException: Warning: Undefined property: Symfony\Component\VarDumper\Caster\CutStub::$cache_locking in \vendor\smarty\smarty\libs\sysplugins\smarty_internal_template.php:737 Stack trace: #0 [internal function]: Smarty_Internal_Template->__destruct() #1 {main} thrown in ************\vendor\smarty\smarty\libs\sysplugins\smarty_internal_template.php on line 737
  5. Prestashop 8.1.2 PHP ver. 8.1 TypeError HTTP 500 Internal Server Error get_parent_class(): Argument #1 ($object_or_class) must be an object or a valid class name, bool given foreach (self::MODULE_ATTRIBUTES as $attribute) { if (isset($tmpModule->{$attribute})) { $attributes[$attribute] = $tmpModule->{$attribute}; } } $attributes['parent_class'] = get_parent_class($tmpModule); $attributes['is_paymentModule'] = is_subclass_of($tmpModule, 'PaymentModule'); $attributes['is_configurable'] = method_exists($tmpModule, 'getContent'); } return $attributes;
  6. Same problem here, in \src\Core\Module\ModuleRepository.php (line 254)
  7. Precisamente hice este proceso usando overrides y ayudado obivamente por este post. Aquí les dejo mi versión con los overrides usados (este es u n proyecto aparte solo reemplacen los campos ) override\classes\Customer.php Aquí solo agreguen los campos nuevos, no hace falta re insertar toda la clase original. El coreException y el Service locator son indispensables. No los remuevan. <?php /** * Copyright since 2007 PrestaShop SA and Contributors * PrestaShop is an International Registered Trademark & Property of PrestaShop SA * */ use PrestaShop\PrestaShop\Adapter\CoreException; use PrestaShop\PrestaShop\Adapter\ServiceLocator; /*** * Class CustomerCore */ class Customer extends CustomerCore { public $retail; public $addressC; public $cityC; public $stateC; public $countryC; public $zipC; public $phoneC; public $mobileC; public $aboutus; public $extrainfo; /** * @see ObjectModel::$definition */ public static $definition = [ 'table' => 'customer', 'primary' => 'id_customer', 'fields' => [ 'secure_key' => ['type' => self::TYPE_STRING, 'validate' => 'isMd5', 'copy_post' => false], 'lastname' => ['type' => self::TYPE_STRING, 'validate' => 'isCustomerName', 'required' => true, 'size' => 255], 'firstname' => ['type' => self::TYPE_STRING, 'validate' => 'isCustomerName', 'required' => true, 'size' => 255], 'email' => ['type' => self::TYPE_STRING, 'validate' => 'isEmail', 'required' => true, 'size' => 255], 'passwd' => ['type' => self::TYPE_STRING, 'validate' => 'isPasswd', 'required' => true, 'size' => 255], 'last_passwd_gen' => ['type' => self::TYPE_STRING, 'copy_post' => false], 'id_gender' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedId'], 'birthday' => ['type' => self::TYPE_DATE, 'validate' => 'isBirthDate'], 'newsletter' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'], 'newsletter_date_add' => ['type' => self::TYPE_DATE, 'copy_post' => false], 'ip_registration_newsletter' => ['type' => self::TYPE_STRING, 'copy_post' => false], 'optin' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'], 'website' => ['type' => self::TYPE_STRING, 'validate' => 'isUrl'], 'company' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName'], //Campos nuevos 'retail' => array('type' => self::TYPE_STRING, 'validate' => 'isGenericName'), 'addressC' => array('type' => self::TYPE_STRING,), 'aboutus' => array('type' => self::TYPE_STRING,), 'extrainfo' => array('type' => self::TYPE_STRING,), 'stateC' => array('type' => self::TYPE_STRING,), 'countryC' => array('type' => self::TYPE_STRING,), 'zipC' => array('type' => self::TYPE_STRING,), 'cityC' => array('type' => self::TYPE_STRING,), 'phoneC' => array('type' => self::TYPE_STRING,), 'mobileC' => array('type' => self::TYPE_STRING,), //End Campos nuevos 'siret' => ['type' => self::TYPE_STRING, 'validate' => 'isGenericName'], 'ape' => ['type' => self::TYPE_STRING, 'validate' => 'isApe'], 'outstanding_allow_amount' => ['type' => self::TYPE_FLOAT, 'validate' => 'isFloat', 'copy_post' => false], 'show_public_prices' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false], 'id_risk' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'copy_post' => false], 'max_payment_days' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'copy_post' => false], 'active' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false], 'deleted' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false], 'note' => ['type' => self::TYPE_HTML, 'size' => 65000, 'copy_post' => false], 'is_guest' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool', 'copy_post' => false], 'id_shop' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'copy_post' => false], 'id_shop_group' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'copy_post' => false], 'id_default_group' => ['type' => self::TYPE_INT, 'copy_post' => false], 'id_lang' => ['type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'copy_post' => false], 'date_add' => ['type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_post' => false], 'date_upd' => ['type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_post' => false], 'reset_password_token' => ['type' => self::TYPE_STRING, 'validate' => 'isSha1', 'size' => 40, 'copy_post' => false], 'reset_password_validity' => ['type' => self::TYPE_DATE, 'validate' => 'isDateOrNull', 'copy_post' => false], ], ]; } classes\form\CustomerPersister.php <?php /** * Copyright since 2007 PrestaShop SA and Contributors * */ use PrestaShop\PrestaShop\Core\Crypto\Hashing as Crypto; use Symfony\Component\Translation\TranslatorInterface; class CustomerPersister extends CustomerPersisterCore { private $errors = []; private $context; private $crypto; private $translator; private $guest_allowed; public function __construct( Context $context, Crypto $crypto, TranslatorInterface $translator, $guest_allowed ) { $this->context = $context; $this->crypto = $crypto; $this->translator = $translator; $this->guest_allowed = $guest_allowed; } public function getErrors() { return $this->errors; } public function save(Customer $customer, $clearTextPassword, $newPassword = '', $passwordRequired = true) { if ($customer->id) { return $this->update($customer, $clearTextPassword, $newPassword, $passwordRequired); } return $this->create($customer, $clearTextPassword); } private function update(Customer $customer, $clearTextPassword, $newPassword, $passwordRequired = true) { if (!$customer->is_guest && $passwordRequired && !$this->crypto->checkHash( $clearTextPassword, $customer->passwd, _COOKIE_KEY_ )) { $msg = $this->translator->trans( 'Invalid email/password combination', [], 'Shop.Notifications.Error' ); $this->errors['email'][] = $msg; $this->errors['password'][] = $msg; return false; } if (!$customer->is_guest) { $customer->passwd = $this->crypto->hash( $newPassword ? $newPassword : $clearTextPassword, _COOKIE_KEY_ ); } if ($customer->is_guest || !$passwordRequired) { // TODO SECURITY: Audit requested if ($customer->id != $this->context->customer->id) { // Since we're updating a customer without // checking the password, we need to check that // the customer being updated is the one from the // current session. // The error message is not great, // but it should only be displayed to hackers // so it should not be an issue :) $this->errors['email'][] = $this->translator->trans( 'There seems to be an issue with your account, please contact support', [], 'Shop.Notifications.Error' ); return false; } } $guest_to_customer = false; if ($clearTextPassword && $customer->is_guest) { $guest_to_customer = true; $customer->is_guest = false; $customer->passwd = $this->crypto->hash( $clearTextPassword, _COOKIE_KEY_ ); } if ($customer->is_guest || $guest_to_customer) { // guest cannot update their email to that of an existing real customer if (Customer::customerExists($customer->email, false, true)) { $this->errors['email'][] = $this->translator->trans( 'An account was already registered with this email address', [], 'Shop.Notifications.Error' ); return false; } } if ($customer->email != $this->context->customer->email) { $customer->removeResetPasswordToken(); } $ok = $customer->save(); if ($ok) { $this->context->updateCustomer($customer); $this->context->cart->update(); Hook::exec('actionCustomerAccountUpdate', [ 'customer' => $customer, ]); if ($guest_to_customer) { $this->sendConfirmationMail($customer); $this->sendConfirmationAdminMail($customer); } } return $ok; } private function create(Customer $customer, $clearTextPassword) { if (!$clearTextPassword) { if (!$this->guest_allowed) { $this->errors['password'][] = $this->translator->trans( 'Password is required', [], 'Shop.Notifications.Error' ); return false; } /** * Warning: this is only safe provided * that guests cannot log in even with the generated * password. That's the case at least at the time of writing. */ $clearTextPassword = $this->crypto->hash( microtime(), _COOKIE_KEY_ ); $customer->is_guest = true; } $customer->passwd = $this->crypto->hash( $clearTextPassword, _COOKIE_KEY_ ); if (Customer::customerExists($customer->email, false, true)) { $this->errors['email'][] = $this->translator->trans( 'An account was already registered with this email address', [], 'Shop.Notifications.Error' ); return false; } $ok = $customer->save(); if ($ok) { $this->context->updateCustomer($customer); $this->context->cart->update(); $this->sendConfirmationMail($customer); Hook::exec('actionCustomerAccountAdd', [ 'newCustomer' => $customer, ]); } return $ok; } private function sendConfirmationMail(Customer $customer) { if ($customer->is_guest || !Configuration::get('PS_CUSTOMER_CREATION_EMAIL')) { return true; } return Mail::Send( $this->context->language->id, 'account', $this->translator->trans( 'Welcome!', [], 'Emails.Subject' ), [ '{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{email}' => $customer->email, ], $customer->email, $customer->firstname . ' ' . $customer->lastname ); } private function sendConfirmationAdminMail(Customer $customer) { if ($customer->is_guest || !Configuration::get('PS_CUSTOMER_CREATION_EMAIL')) { return true; } return Mail::Send( $this->context->language->id, 'account_for_admin', $this->translator->trans( 'New Client!', array(), 'Emails.Subject' ), array( '{firstname}' => $customer->firstname, '{lastname}' => $customer->lastname, '{type}' => $customer->retail, '{email}' => $customer->email, '{company}' => $customer->company, '{website}' => $customer->website, '{phone}' => $customer->phoneC, '{mobil}' => $customer->mobileC, '{address}' => $customer->addressC, '{zip}' => $customer->zipC, '{city}' => $customer->cityC, '{state}' => $customer->stateC, '{country}' => $customer->countryC, '{about}' => $customer->aboutus, '{extrainfo}' => $customer->extrainfo ), '[email protected]', Configuration::get('PS_SHOP_NAME') ); } } override\classes\form\CustomerFormatter.php Desafortunadamente tuvo un problema con las traducciones en este sitio que no me permitia entrar directo a traducir los textos, Y tuve que hacer adaptaciones por las prisas, pero se puede entender la idea en este override. <?php /** * @Override CustomerFormatter */ use Symfony\Component\Translation\TranslatorInterface; class CustomerFormatter extends CustomerFormatterCore { private $translator; private $language; private $ask_for_birthdate = true; private $ask_for_partner_optin = true; private $partner_optin_is_required = true; private $ask_for_password = true; private $password_is_required = true; private $ask_for_new_password = false; public function __construct( TranslatorInterface $translator, Language $language ) { $this->translator = $translator; $this->language = $language; } public function setAskForBirthdate($ask_for_birthdate) { $this->ask_for_birthdate = $ask_for_birthdate; return $this; } public function setAskForPartnerOptin($ask_for_partner_optin) { $this->ask_for_partner_optin = $ask_for_partner_optin; return $this; } public function setPartnerOptinRequired($partner_optin_is_required) { $this->partner_optin_is_required = $partner_optin_is_required; return $this; } public function setAskForPassword($ask_for_password) { $this->ask_for_password = $ask_for_password; return $this; } public function setAskForNewPassword($ask_for_new_password) { $this->ask_for_new_password = $ask_for_new_password; return $this; } public function setPasswordRequired($password_is_required) { $this->password_is_required = $password_is_required; return $this; } public function getFormat() { $format = []; $genders = Gender::getGenders($this->language->id); if ($genders->count() > 0) { $genderField = (new FormField()) ->setName('id_gender') ->setType('radio-buttons') ->setLabel( $this->translator->trans( 'Social title', [], 'Shop.Forms.Labels' ) ); foreach ($genders as $gender) { $genderField->addAvailableValue($gender->id, $gender->name); } $format[$genderField->getName()] = $genderField; } $format['firstname'] = (new FormField()) ->setName('firstname') ->setLabel( $this->translator->trans( 'First name', [], 'Shop.Forms.Labels' ) ) ->setRequired(true) ->addAvailableValue( 'comment', $this->translator->trans('Only letters and the dot (.) character, followed by a space, are allowed.', [], 'Shop.Forms.Help') ); $format['lastname'] = (new FormField()) ->setName('lastname') ->setLabel( $this->translator->trans( 'Last name', [], 'Shop.Forms.Labels' ) ) ->setRequired(true) ->addAvailableValue( 'comment', $this->translator->trans('Only letters and the dot (.) character, followed by a space, are allowed.', [], 'Shop.Forms.Help') ); if (Configuration::get('PS_B2B_ENABLE')) { $format['company'] = (new FormField()) ->setName('company') ->setType('text') ->setLabel($this->translator->trans( 'Company', [], 'Shop.Forms.Labels' )); $format['siret'] = (new FormField()) ->setName('siret') ->setType('text') ->setLabel($this->translator->trans( // Please localize this string with the applicable registration number type in your country. For example : "SIRET" in France and "Código fiscal" in Spain. 'Identification number', [], 'Shop.Forms.Labels' )); } $format['email'] = (new FormField()) ->setName('email') ->setType('email') ->setLabel( $this->translator->trans( 'Email', [], 'Shop.Forms.Labels' ) ) ->setRequired(true); if ($this->ask_for_password) { $format['password'] = (new FormField()) ->setName('password') ->setType('password') ->setLabel( $this->translator->trans( 'Password', [], 'Shop.Forms.Labels' ) ) ->setRequired($this->password_is_required); } if ($this->ask_for_new_password) { $format['new_password'] = (new FormField()) ->setName('new_password') ->setType('password') ->setLabel( $this->translator->trans( 'New password', [], 'Shop.Forms.Labels' ) ); } ////////////////////////////////////////////// //Adding extrafields ////////////////////////////////////////////// //Translations (the native translations does not work well anymore, use this instead.) if ($this->language->id == 1){//EN $Op_TypeC = ["I'm residential customer", "I'm a residential builder or contractor", "I'm an architect or designer", "I'm a commercial general contractor", "Other"]; $Op_Company = 'Company'; $Op_State = 'State / Province'; $Op_Zip = 'Zip / Postal Code'; $Op_How = 'How did you hear about us?'; $Op_mobileC = 'Cell Phone'; $Op_website = 'Website'; $Op_HowOP = ["Online Search","Online Ads","Print Ads","Word of mouth","i'm already a client","Other"]; $Op_ExtraIn = 'Additional Information'; } if ($this->language->id == 2){//FR $Op_TypeC = ['Je suis un client résidentiel', 'Je suis un constructeur résidentiel ou un entrepreneur', 'Je suis architecte ou designer', 'Je suis un entrepreneur général commercial', 'Autre']; $Op_Company = 'Entreprise'; $Op_State = 'Province'; $Op_Zip = 'Code postal'; $Op_How = 'Comment avez-vous entendu parler de nous?'; $Op_mobileC = 'Cellulaire'; $Op_website = 'Site Web'; $Op_HowOP = ["Recherche en ligne","Annonces en ligne","Annonces imprimées (magazines, journaux, etc.)","Bouche à oreille","Je suis déjà client","Autre"]; $Op_ExtraIn = 'Information additionnelle'; } $format['retail'] = (new FormField) ->setName('retail') ->setType('select') ->setLabel( $this->translator->trans( 'Client type', [], 'Shop.Forms.MM' ) ) ->addAvailableValue('Residential customer', $Op_TypeC[0]) ->addAvailableValue('Residential builder', $Op_TypeC[1]) ->addAvailableValue('Architect', $Op_TypeC[2]) ->addAvailableValue('General contractor', $Op_TypeC[3]) ->addAvailableValue('other', $Op_TypeC[4]) ->setRequired(true) ; $format['company'] = (new FormField) ->setName('company') ->setLabel( $this->translator->trans( $Op_Company, [], 'Shop.Forms.Labels' ) ) ->setRequired(false) ; $format['addressC'] = (new FormField) ->setName('addressC') ->setLabel( $this->translator->trans( 'Address', [], 'Shop.Forms.Labels' ) ) ->setRequired(true) ; $format['cityC'] = (new FormField) ->setName('cityC') ->setLabel( $this->translator->trans( 'City', [], 'Shop.Forms.Labels' ) ) ->setRequired(true) ; $format['countryC'] = (new FormField) ->setName('countryC') ->setType('countrySelect') ->setLabel( $this->translator->trans( 'Country', [], 'Shop.Forms.Labels' ) ) ->addAvailableValue('Canada', $this->translator->trans( 'Canada', [], 'Shop.Forms.Labels' )) ->addAvailableValue('United States', $this->translator->trans( 'United States', [], 'Shop.Forms.Labels' )) ->setRequired(true) ; $format['stateC'] = (new FormField) ->setName('stateC') ->setLabel( $this->translator->trans( $Op_State,[],'Shop.Forms.Labels' ) ) ->setRequired(true) ; $format['zipC'] = (new FormField) ->setName('zipC') ->setLabel( $this->translator->trans( $Op_Zip,[],'Shop.Forms.Labels' ) ) ->setRequired(true) ; $format['phoneC'] = (new FormField) ->setName('phoneC') ->setType('text') ->setLabel( $this->translator->trans( 'Phone', [], 'Shop.Forms.Labels' ) ) ->setRequired(true) ; $format['mobileC'] = (new FormField) ->setName('mobileC') ->setType('text') ->setLabel($Op_mobileC) ->setRequired(false) ; $format['website'] = (new FormField) ->setName('website') ->setType("UrlType") ->setLabel($Op_website) ->setRequired(false) ; $format['aboutus'] = (new FormField) ->setName('aboutus') ->setType('select') ->setLabel($Op_How) ->addAvailableValue('Online Search',$Op_HowOP[0]) ->addAvailableValue('Online Ads',$Op_HowOP[1]) ->addAvailableValue('Print Ads',$Op_HowOP[2]) ->addAvailableValue('Word of mouth',$Op_HowOP[3]) ->addAvailableValue("i'm already a client",$Op_HowOP[4]) ->addAvailableValue("Other",$Op_HowOP[5]) ->setRequired(true) ; $format['extrainfo'] = (new FormField) ->setName('extrainfo') ->setType('textarea') ->setLabel($Op_ExtraIn) ->setRequired(false) ; //////////////////////////////////////////////////////// //End //////////////////////////////////////////////////////// if ($this->ask_for_birthdate) { $format['birthday'] = (new FormField()) ->setName('birthday') ->setType('text') ->setLabel( $this->translator->trans( 'Birthdate', [], 'Shop.Forms.Labels' ) ) ->addAvailableValue('placeholder', Tools::getDateFormat()) ->addAvailableValue( 'comment', $this->translator->trans('(E.g.: %date_format%)', ['%date_format%' => Tools::formatDateStr('31 May 1970')], 'Shop.Forms.Help') ); } if ($this->ask_for_partner_optin) { $format['optin'] = (new FormField()) ->setName('optin') ->setType('checkbox') ->setLabel( $this->translator->trans( 'Receive offers from our partners', [], 'Shop.Theme.Customeraccount' ) ) ->setRequired($this->partner_optin_is_required); } // ToDo, replace the hook exec with HookFinder when the associated PR will be merged $additionalCustomerFormFields = Hook::exec('additionalCustomerFormFields', ['fields' => &$format], null, true); if (is_array($additionalCustomerFormFields)) { foreach ($additionalCustomerFormFields as $moduleName => $additionnalFormFields) { if (!is_array($additionnalFormFields)) { continue; } foreach ($additionnalFormFields as $formField) { $formField->moduleName = $moduleName; $format[$moduleName . '_' . $formField->getName()] = $formField; } } } // TODO: TVA etc.? return $this->addConstraints($format); } private function addConstraints(array $format) { $constraints = Customer::$definition['fields']; foreach ($format as $field) { if (!empty($constraints[$field->getName()]['validate'])) { $field->addConstraint( $constraints[$field->getName()]['validate'] ); } } return $format; } } Por ultimo resaltar que si no encuentras archivos como por ememplo "personal_information.html.twig" Es porque estas usando un PS inferior donde todavia se usa Smarty en el backend. Espero haber ayudado. Saludos!!!
  8. Depends what program you are using to run websites (XAMP, LARAGON, EASYPHP). Check the preferences to switch the PHP ver.
  9. Its works for me: Override Tools.php \override\classes\Tools.php With this i can use CAD only in frontend and USD for backend. Used in Prestashop 1.7.7.4 Not conflict detected. Just need replace 2 lines. In my case i used 1 as id currency for CAD <?php class Tools extends ToolsCore { /** * Set cookie currency from POST or default currency. * * @return Currency object */ public static function setCurrency($cookie) { if (Tools::isSubmit('SubmitCurrency') && ($id_currency = Tools::getValue('id_currency'))) { /** @var Currency $currency */ $currency = Currency::getCurrencyInstance((int) $id_currency); if (is_object($currency) && $currency->id && !$currency->deleted && $currency->isAssociatedToShop()) { $cookie->id_currency = (int) $currency->id; } } $currency = null; if ((int) $cookie->id_currency) { //$currency = Currency::getCurrencyInstance((int) $cookie->id_currency);//befoore $currency = Currency::getCurrencyInstance(1);//Force CAD for frontend. } if (!Validate::isLoadedObject($currency) || (bool) $currency->deleted || !(bool) $currency->active) { //$currency = Currency::getCurrencyInstance(Configuration::get('PS_CURRENCY_DEFAULT'));//before $currency = Currency::getCurrencyInstance(1);//Force CAD for frontend. } $cookie->id_currency = (int) $currency->id; if ($currency->isAssociatedToShop()) { return $currency; } else { // get currency from context $currency = Shop::getEntityIds('currency', Context::getContext()->shop->id, true, true); if (isset($currency[0]) && $currency[0]['id_currency']) { $cookie->id_currency = $currency[0]['id_currency']; return Currency::getCurrencyInstance((int) $cookie->id_currency); } } return $currency; } }
  10. SOLUCIÓN: en el xml que se genera hay un tag llamado cache_default_attribute y tiene que tener valor cero antes de importar productos: <cache_default_attribute>0</cache_default_attribute> SOLUCIÓN 2: Si ya importaste todo y no quieres perder el tiempo corriendo tu script nuevamente. Basta con ir a la tabla ps_product_shop y ps_product y buscar la columna "cache_default_attribute" y dejarlo en cero. (CON UN UPDATE WHERE...bastará) La primera tabla tiene efecto en la pagina de producto y la segunda he notado que tiene efecto en la pagina de categorias.
  11. Estoy usando PS 1.7.2.4 Despues de varios intentos para importar productos vía webservice usando CURL para agregar productos e imagenes al terminar el proceso, la lista de productos y precios se ve correctamente en el backend. Puedo visualizar el Price (tax excl.) y el Price (tax incl.) correctamente. El Problema es en el front end donde la pagina de producto y categoria los productos ingresados via webservice muestran el precio en ceros. Después de crear un producto de prueba, este se puede ver en ambos lados. Al parecer solo pasa cuando se usa Webservice. Hay manera de corregir esto? El precio al parecer esta ingresado correctamente en la tabla ps_product columna price T ambien esta ingresado en la tabla ps_product_shop (desconozco si hay mas tablas por revisar) Comparando registros los unicos cambios detectados fueron en ps_product_shop en las columnas indexed y tambien id_tax_rules_group. Pero al dejar los valores como los demas productos que sí muestran el precio estos registros siguen sin mostrar el precio.
  12. you will found the code inside theme.js (compressed) look the follow code and edit as you wish: <button class="'+T.buttondown_class+' bootstrap-touchspin-up" type="button"><i class="'+T.verticalupclass+'"></i></button><button class="'+T.buttonup_class+' bootstrap-touchspin-down" type="button"><i class="'+T.verticaldownclass+'"></i></button>
×
×
  • Create New...