Jump to content

Edit History

Eolia

Eolia

Il y a 2 heures, Sda33 a dit :

1) Affichage du détail des commandes passées avant la 1.6.2.7 : les produits personnalisés remontent bien dans le détail des commandes, mais pas la personnalisation associée (ils remontent comme des produits classiques qui n'auraient pas de personnalisation)

Pour les commandes passées avant, si l'id_customization n'a pas été rempli il est impossible que le CMS les invente. Pas d'autre solution que de les remplir dans la bdd à la mano

 

Il y a 2 heures, Sda33 a dit :

2) Toujours le même problème sur l'édition d'une fiche produit, onglet "Personnalisation", le dernier champ "text" n'apparaît pas à l'écran et je ne peux donc pas l'éditer.

Pour memo j'essaie de déboguer et je cherche où est généré {$display_text_labels} que l'on a ligne 119 de customization.tpl dans [admin]/themes/default/template/controllers/products, parce qu'il oublie une ligne pourtant présente en BDD.

Votre problème est quand même très particulier et je n'ai pas de piste simple. Je soupçonne un js externe (module chargé dans le backofficeheader ?)

Pour info cette partie est générée depuis l'AdminProductController.php, ligne 4293

'display_text_labels' => $this->_displayLabelFields($obj, $labels, $this->_languages, Configuration::get('PS_LANG_DEFAULT'), Product::CUSTOMIZE_TEXTFIELD),
    protected function _displayLabelFields(&$obj, &$labels, $languages, $default_language, $type)
    {
        $content = '';
        $type = (int)($type);
        $labelGenerated = array(Product::CUSTOMIZE_FILE => (isset($labels[Product::CUSTOMIZE_FILE]) ? count($labels[Product::CUSTOMIZE_FILE]) : 0), Product::CUSTOMIZE_TEXTFIELD => (isset($labels[Product::CUSTOMIZE_TEXTFIELD]) ? count($labels[Product::CUSTOMIZE_TEXTFIELD]) : 0));

        $fieldIds = $this->_getCustomizationFieldIds($labels, $labelGenerated, $obj);
        if (isset($labels[$type])) {
            foreach ($labels[$type] as $id_customization_field => $label) {
                $content .= $this->_displayLabelField($label, $languages, $default_language, $type, $fieldIds, (int)$id_customization_field);
            }
        }
        return $content;
    }
    protected function _getCustomizationFieldIds($labels, $alreadyGenerated, $obj)
    {
        $customizableFieldIds = array();
        if (isset($labels[Product::CUSTOMIZE_FILE])) {
            foreach ($labels[Product::CUSTOMIZE_FILE] as $id_customization_field => $label) {
                $customizableFieldIds[] = 'label_'.Product::CUSTOMIZE_FILE.'_'.(int)($id_customization_field);
            }
        }
        if (isset($labels[Product::CUSTOMIZE_TEXTFIELD])) {
            foreach ($labels[Product::CUSTOMIZE_TEXTFIELD] as $id_customization_field => $label) {
                $customizableFieldIds[] = 'label_'.Product::CUSTOMIZE_TEXTFIELD.'_'.(int)($id_customization_field);
            }
        }
        $j = 0;
        for ($i = $alreadyGenerated[Product::CUSTOMIZE_FILE]; $i < (int)($this->getFieldValue($obj, 'uploadable_files')); $i++) {
            $customizableFieldIds[] = 'newLabel_'.Product::CUSTOMIZE_FILE.'_'.$j++;
        }
        $j = 0;
        for ($i = $alreadyGenerated[Product::CUSTOMIZE_TEXTFIELD]; $i < (int)($this->getFieldValue($obj, 'text_fields')); $i++) {
            $customizableFieldIds[] = 'newLabel_'.Product::CUSTOMIZE_TEXTFIELD.'_'.$j++;
        }
        return implode('¤', $customizableFieldIds);
    }

Depuis Product.php:

    public function getCustomizationFields($id_lang = false, $id_shop = null)
    {
        if (!Customization::isFeatureActive()) {
            return false;
        }

        if (Shop::isFeatureActive() && !$id_shop) {
            $id_shop = (int)Context::getContext()->shop->id;
        }

        if (!$result = Db::getInstance()->executeS('
			SELECT cf.`id_customization_field`, cf.`type`, cf.`required`, cf.`price`, cfl.`name`, cfl.`id_lang`
			FROM `'._DB_PREFIX_.'customization_field` cf
			NATURAL JOIN `'._DB_PREFIX_.'customization_field_lang` cfl
			WHERE cf.`id_product` = '.(int)$this->id.($id_lang ? ' AND cfl.`id_lang` = '.(int)$id_lang : '').
                ($id_shop ? ' AND cfl.`id_shop` = '.$id_shop : '').'
			ORDER BY cf.`id_customization_field`')) {
            return false;
        }
        // Add taxes for display
        if (is_object(Context::getContext()->cart) && Context::getContext()->cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')} != null) {
            $id_address = Context::getContext()->cart->{Configuration::get('PS_TAX_ADDRESS_TYPE')};
            $address = Address::initialize((int)$id_address, true);
        }
        else {
            $address = Address::initialize();
        }
        $tax_calculator = TaxManagerFactory::getManager($address, $this->id_tax_rules_group)->getTaxCalculator();
        foreach ($result as &$row) {
            $row['price_wt'] = $tax_calculator->addTaxes($row['price']);             
        }
      
        if ($id_lang) {
            return $result;
        }

        $customization_fields = array();
        foreach ($result as $row) {            
            $customization_fields[(int)$row['type']][(int)$row['id_customization_field']][(int)$row['id_lang']] = $row;
        }

        return $customization_fields;
    }

 

Eolia

Eolia

Il y a 2 heures, Sda33 a dit :

1) Affichage du détail des commandes passées avant la 1.6.2.7 : les produits personnalisés remontent bien dans le détail des commandes, mais pas la personnalisation associée (ils remontent comme des produits classiques qui n'auraient pas de personnalisation)

Pour les commandes passées avant, si l'id_customization n'a pas été rempli il est impossible que le CMS les invente. Pas d'autre solution que de les remplir dans la bdd à la mano

 

Il y a 2 heures, Sda33 a dit :

2) Toujours le même problème sur l'édition d'une fiche produit, onglet "Personnalisation", le dernier champ "text" n'apparaît pas à l'écran et je ne peux donc pas l'éditer.

Pour memo j'essaie de déboguer et je cherche où est généré {$display_text_labels} que l'on a ligne 119 de customization.tpl dans [admin]/themes/default/template/controllers/products, parce qu'il oublie une ligne pourtant présente en BDD.

Votre problème est quand même très particulier et je n'ai pas de piste simple. Je soupçonne un js externe (module chargé dans le backofficeheader ?)

Pour info cette partie est générée depuis l'AdminProductController.php, ligne 4293

'display_text_labels' => $this->_displayLabelFields($obj, $labels, $this->_languages, Configuration::get('PS_LANG_DEFAULT'), Product::CUSTOMIZE_TEXTFIELD),
    protected function _displayLabelFields(&$obj, &$labels, $languages, $default_language, $type)
    {
        $content = '';
        $type = (int)($type);
        $labelGenerated = array(Product::CUSTOMIZE_FILE => (isset($labels[Product::CUSTOMIZE_FILE]) ? count($labels[Product::CUSTOMIZE_FILE]) : 0), Product::CUSTOMIZE_TEXTFIELD => (isset($labels[Product::CUSTOMIZE_TEXTFIELD]) ? count($labels[Product::CUSTOMIZE_TEXTFIELD]) : 0));

        $fieldIds = $this->_getCustomizationFieldIds($labels, $labelGenerated, $obj);
        if (isset($labels[$type])) {
            foreach ($labels[$type] as $id_customization_field => $label) {
                $content .= $this->_displayLabelField($label, $languages, $default_language, $type, $fieldIds, (int)$id_customization_field);
            }
        }
        return $content;
    }
    protected function _getCustomizationFieldIds($labels, $alreadyGenerated, $obj)
    {
        $customizableFieldIds = array();
        if (isset($labels[Product::CUSTOMIZE_FILE])) {
            foreach ($labels[Product::CUSTOMIZE_FILE] as $id_customization_field => $label) {
                $customizableFieldIds[] = 'label_'.Product::CUSTOMIZE_FILE.'_'.(int)($id_customization_field);
            }
        }
        if (isset($labels[Product::CUSTOMIZE_TEXTFIELD])) {
            foreach ($labels[Product::CUSTOMIZE_TEXTFIELD] as $id_customization_field => $label) {
                $customizableFieldIds[] = 'label_'.Product::CUSTOMIZE_TEXTFIELD.'_'.(int)($id_customization_field);
            }
        }
        $j = 0;
        for ($i = $alreadyGenerated[Product::CUSTOMIZE_FILE]; $i < (int)($this->getFieldValue($obj, 'uploadable_files')); $i++) {
            $customizableFieldIds[] = 'newLabel_'.Product::CUSTOMIZE_FILE.'_'.$j++;
        }
        $j = 0;
        for ($i = $alreadyGenerated[Product::CUSTOMIZE_TEXTFIELD]; $i < (int)($this->getFieldValue($obj, 'text_fields')); $i++) {
            $customizableFieldIds[] = 'newLabel_'.Product::CUSTOMIZE_TEXTFIELD.'_'.$j++;
        }
        return implode('¤', $customizableFieldIds);
    }

 

×
×
  • Create New...