Grafyx89 Posted September 29, 2016 Share Posted September 29, 2016 Hello à tous, Comme déjà évoqué dans ce forum, j'utilise beaucoup la variable manufacturer, je l'ajoute beaucoup en tout cas, du moins j’essaie ! Seulement voilà, cette variable semble être complexe. En effet, par exemple je l'ajoute dans le module crossselling, cette dernière étais affiché, et d'un coup, le nom du fabricant ne s'affiche plus .. quand j'active le mode debug, il en ressort l'erreur suivante : Notice: Undefined index: manufacturer_name in /var/www/web/boutique/cache/smarty/compile/e5/25/74/e5257479459ff6291b9c32ddbcd209145c71dff1.file.crossselling.tpl.php on line 56 - See more at: http://www.hardloop.fr/boutique/sous-vetements-haut-femme/1543-icebreaker-sous-vetement-technique-oasis-long-sleeve-crew-femme.html#sthash.lxYiHQ6C.dpuf Cette erreur me rend dingue car ça marchais juste avant sans rien toucher, c'est fou. Merci de votre aide, Bonne journée ! Link to comment Share on other sites More sharing options...
Grafyx89 Posted September 30, 2016 Author Share Posted September 30, 2016 personne ? Link to comment Share on other sites More sharing options...
Arnaud_69 Posted September 30, 2016 Share Posted September 30, 2016 Bonjour, Est-ce que la variable manufacturer est bien définie pour cet article, ou est-ce sur toutes les pages que ça plante ? Link to comment Share on other sites More sharing options...
Grafyx89 Posted September 30, 2016 Author Share Posted September 30, 2016 En réalité, c'est surtout sur la page produit que la variable manufacturer à du mal. Maintenant j'ai l'erreur : Notice: Undefined index: Product in /var/www/web/boutique/cache/smarty/compile/e5/25/74/e5257479459ff6291b9c32ddbcd209145c71dff1.file.crossselling.tpl.php on line 57 Pourtant le cache est désactivé. $smarty->caching = false; $smarty->force_compile = (Configuration::get('PS_SMARTY_FORCE_COMPILE') == _PS_SMARTY_FORCE_COMPILE_) ? true : false; $smarty->compile_check = (Configuration::get('PS_SMARTY_FORCE_COMPILE') >= _PS_SMARTY_CHECK_COMPILE_) ? true : false; Merci de ta réponse en tout cas, ça fait plaisir, je commençais à désespérer Link to comment Share on other sites More sharing options...
Arnaud_69 Posted September 30, 2016 Share Posted September 30, 2016 Est ce que tu pourrais afficher ton tpl modiifé, et vérifier si les variables sont bien appelées dans le controller. J'imagine que oui ! Link to comment Share on other sites More sharing options...
Grafyx89 Posted September 30, 2016 Author Share Posted September 30, 2016 tpl modifié de ? Product ? C'est simple, dans ma page manufacturer.tpl, il a été créer un bloc : {if isset($topVentesProducts) && $topVentesProducts|@count > 0} <div class="top-ventes no-padding"> <h4 class="strike">{l s='Top ventes'} {$manufacturer->name|escape:'html':'UTF-8'}</h4> <div class="products logo featured"> {foreach from=$topVentesProducts item=topVentesProduct} <div class="_slide"> <a href="{$topVentesProduct.link|escape:'html':'UTF-8'}"> <img title="{$topVentesProduct.name|escape:'html':'UTF-8'} " alt="{$topVentesProduct.name|escape:'html':'UTF-8'}" data-id="{$topVentesProduct.id_product}" src="{$link->getImageLink($topVentesProduct.link_rewrite, $topVentesProduct.id_image, 'home_default')|escape:'html':'UTF-8'}" class="product"> {if $topVentesProduct.specific_prices.reduction_type == 'percentage' && (($topVentesProduct.specific_prices.reduction*100) > 0)} <span class="sale-box no-print">-{$topVentesProduct.specific_prices.reduction * 100}%</span> {/if} </a> <div class="information"> <div class="manufacturer">{$topVentesProduct.manufacturer_name|truncate:45:'...'|escape:'html':'UTF-8'}</div> <div class="name">{$topVentesProduct.name|truncate:45:'...'|escape:'html':'UTF-8'}</div> <div class="price"> {if !$priceDisplay}{convertPrice price=$topVentesProduct.price}{else}{convertPrice price=$topVentesProduct.price_tax_exc}{/if} {if isset($topVentesProduct.specific_prices) && $topVentesProduct.specific_prices && isset($topVentesProduct.specific_prices.reduction) && $topVentesProduct.specific_prices.reduction > 0} {hook h="displayProductPriceBlock" product=$topVentesProduct type="old_price"} <span class="old-price product-price"> {displayWtPrice p=$topVentesProduct.price_without_reduction} </span> {/if} </div> </div> </div> {/foreach} </div> <div class="clearfix"> </div> </div> {/if} Cela affiche le top ventes des fabricants. Pour l'affiché dans product.tpl, j'ai en effet été dans le ManufacturerController.php qui appel cette fonction ($topVentesProducts) : protected function assignOne() { parent::assignOne(); $this->addJqueryPlugin('bxslider'); $this->context->smarty->assign(array( 'last_comments' => 'last_comments' )); $nosCoupsDeCoeurProducts = $this->manufacturer->getProducts( $this->manufacturer->id, $this->context->language->id, 1, 4, null, null, false, true, true, null, 585 ); if (!empty($nosCoupsDeCoeurProducts)) { $this->context->smarty->assign('nosCoupsDeCoeurProducts', $nosCoupsDeCoeurProducts); } $topVentesProducts = $this->manufacturer->getTopDesVentesProducts( $this->manufacturer->id, $this->context->language->id, 1, 4 ); if (!empty($topVentesProducts)) { $this->context->smarty->assign('topVentesProducts', $topVentesProducts); } // start get latest comment from manufacturer's products $psComments = array(); $sql = 'SELECT * FROM `' . _DB_PREFIX_ . 'product_comment` pc LEFT JOIN `' . _DB_PREFIX_ . 'product` p ON pc.`id_product` = p.`id_product` WHERE p.`id_manufacturer` = ' . (int)$this->manufacturer->id . ' ORDER BY pc.`date_add` DESC LIMIT 0, 2'; $result = DB::getInstance()->executeS($sql); foreach ($result as $row) { $product = new \Product($row['id_product'], false, $this->context->language->id); $imageRow = \Image::getCover($row['id_product']); $psComments[] = array( 'img_url' => $this->context->link->getImageLink($product->link_rewrite, $imageRow['id_image'], 'medium_default'), 'product_url' => $this->context->link->getProductLink($row['id_product']), 'title' => $row['title'], 'content' => $row['content'], 'customer' => $row['customer_name'], 'date' => strtolower(strftime('%e %b. %Y', strtotime($row['date_add']))), //17 oct. 2014 ); } if (!empty($psComments)) { $this->context->smarty->assign('psComments', $psComments); } // end get latest comment from manufacturer's products } /** * Assign template vars if displaying the manufacturer list */ protected function assignAll() { parent::assignAll(); } Que j'ai inséré dans ProductController.php, et copié/collé le code dit en amont dans le .tpl Il n'affiche pas ce qu'il faut. En parallèle, il a été créer un top vente par catégorie de la même manière en html, j'ai donc pris la fonction qui appel $topVentesProduct aussi et je l'ai copiée dans ProductController.php. Idem, j'ai aussi copié le code html inscris dans categorie.tpl (qui est relativement le même que dans manufacturer.tpl) et par contre, la il m'affiche bien les meilleures par catégories ..J'imagine donc qu'il y a un problème avec cette variable manufacturer pour qu'elle disparaisse, réapparaisse, dans crosselling aussi .. J'ai tellement réfléchi et essayé de solutions que je n'y vois plus aucunes ^^ Merci encore Link to comment Share on other sites More sharing options...
Arnaud_69 Posted September 30, 2016 Share Posted September 30, 2016 Au vu d'une structure de tables que j'ai en local, et au vu de ta requête avec jointure sur les manufacturer, je peux te dire que manufacturer_name n'existe pas. Dans la table ps_manufacturer tu as le champ name mais pas manufacturer_name. Mais au vu de ta jointure, tu ne fais pas appel à cette table. Il te reste donc les product_comment, dans laquelle il sembelrait que tu aies inséré les noms des fabricants. Va dans la table, et passe la requête suivante par exemple : SELECT * FROM `ps_product_comment` pc LEFT JOIN `ps_product` p ON pc.`id_product` = p.`id_product` WHERE p.`id_manufacturer` >0 ORDER BY pc.`date_add` DESC Regarde si tu as bien le champ manufacturer_name en tête de colonne dans les enregistrements retournés et que les champs que tu affiches dans le tpl soient tous bien là. Link to comment Share on other sites More sharing options...
Grafyx89 Posted September 30, 2016 Author Share Posted September 30, 2016 Tu me demandes de passer cette requête dans la base de donnée c'est bien ça ? Je comprends pas bien ton retour désolé .. Link to comment Share on other sites More sharing options...
Arnaud_69 Posted September 30, 2016 Share Posted September 30, 2016 Oui, dans un phpmyadmin par exemple si tu en as. L'histoire c'est de s'assurer que tout est bien retourné dans la requête. Ce sera bine retourné en fait, mais pas forcément "renseigné". Est-ce que tu me suis ? Link to comment Share on other sites More sharing options...
Grafyx89 Posted September 30, 2016 Author Share Posted September 30, 2016 Très franchement non pas trop .. En plus je ne gère pas la base de donnée, elle est géré par un prestataire qui ne comprend pas qu'il faut envoyer les accès. Visiblement il n'y a pas phpmyadmin dessus. Heureusement que c'est un serveur de dev haha. Link to comment Share on other sites More sharing options...
Grafyx89 Posted September 30, 2016 Author Share Posted September 30, 2016 Mon ManufacturerController.php : <?php /* * 2007-2014 PrestaShop * * NOTICE OF LICENSE * * This source file is subject to the Open Software License (OSL 3.0) * that is bundled with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://opensource.org/licenses/osl-3.0.php * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to [email protected] so we can send you a copy immediately. * * DISCLAIMER * * Do not edit or add to this file if you wish to upgrade PrestaShop to newer * versions in the future. If you wish to customize PrestaShop for your * needs please refer to http://www.prestashop.com for more information. * * @author PrestaShop SA <[email protected]> * @copyright 2007-2014 PrestaShop SA * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0) * International Registered Trademark & Property of PrestaShop SA */ class ManufacturerController extends ManufacturerControllerCore { /** * Assign template vars if displaying one manufacturer */ protected function assignOne() { parent::assignOne(); $this->addJqueryPlugin('bxslider'); $this->context->smarty->assign(array( 'last_comments' => 'last_comments' )); $nosCoupsDeCoeurProducts = $this->manufacturer->getProducts( $this->manufacturer->id, $this->context->language->id, 1, 4, null, null, false, true, true, null, 585 ); if (!empty($nosCoupsDeCoeurProducts)) { $this->context->smarty->assign('nosCoupsDeCoeurProducts', $nosCoupsDeCoeurProducts); } $topVentesProducts = $this->manufacturer->getTopDesVentesProducts( $this->manufacturer->id, $this->context->language->id, 1, 4 ); if (!empty($topVentesProducts)) { $this->context->smarty->assign('topVentesProducts', $topVentesProducts); } // start get latest comment from manufacturer's products $psComments = array(); $sql = 'SELECT * FROM `' . _DB_PREFIX_ . 'product_comment` pc LEFT JOIN `' . _DB_PREFIX_ . 'product` p ON pc.`id_product` = p.`id_product` WHERE p.`id_manufacturer` = ' . (int)$this->manufacturer->id . ' ORDER BY pc.`date_add` DESC LIMIT 0, 2'; $result = DB::getInstance()->executeS($sql); foreach ($result as $row) { $product = new \Product($row['id_product'], false, $this->context->language->id); $imageRow = \Image::getCover($row['id_product']); $psComments[] = array( 'img_url' => $this->context->link->getImageLink($product->link_rewrite, $imageRow['id_image'], 'medium_default'), 'product_url' => $this->context->link->getProductLink($row['id_product']), 'title' => $row['title'], 'content' => $row['content'], 'customer' => $row['customer_name'], 'date' => strtolower(strftime('%e %b. %Y', strtotime($row['date_add']))), //17 oct. 2014 ); } if (!empty($psComments)) { $this->context->smarty->assign('psComments', $psComments); } // end get latest comment from manufacturer's products } /** * Assign template vars if displaying the manufacturer list */ protected function assignAll() { parent::assignAll(); } } Mon ProductControllers.php : <?php class Product extends ProductCore { public static function getTopDesVentesProducts($id_manufacturer, $id_lang, $p, $n, $order_by = null, $order_way = null, $get_total = false, $active = true, $active_category = true, Context $context = null) { if (!$context) $context = Context::getContext(); $front = true; if (!in_array($context->controller->controller_type, array('front', 'modulefront'))) $front = false; if ($p < 1) $p = 1; if (empty($order_by)) $order_by = 'product_quantity'; if (empty($order_way)) $order_way = 'DESC'; if (!Validate::isOrderBy($order_by) || !Validate::isOrderWay($order_way)) die (Tools::displayError()); $groups = FrontController::getCurrentCustomerGroups(); $sql_groups = count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1'; /* Return only the number of products */ if ($get_total) { $sql = ' SELECT p.`id_product` FROM `'._DB_PREFIX_.'product` p '.Shop::addSqlAssociation('product', 'p').' WHERE p.id_manufacturer = '.(int)$id_manufacturer .($active ? ' AND product_shop.`active` = 1' : '').' '.($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '').' AND p.`id_product` IN ( SELECT cp.`id_product` FROM `'._DB_PREFIX_.'category_group` cg LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)'. ($active_category ? ' INNER JOIN `'._DB_PREFIX_.'category` ca ON cp.`id_category` = ca.`id_category` AND ca.`active` = 1' : '').' WHERE cg.`id_group` '.$sql_groups.' )'; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); return (int)count($result); } if (strpos($order_by, '.') > 0) { $order_by = explode('.', $order_by); $order_by = pSQL($order_by[0]).'.`'.pSQL($order_by[1]).'`'; } $alias = ''; if ($order_by == 'price') { $alias = 'product_shop.'; } elseif ($order_by == 'name') { $alias = 'pl.'; } elseif ($order_by == 'manufacturer_name') { $order_by = 'name'; $alias = 'm.'; } elseif ($order_by == 'quantity') { $alias = 'stock.'; } elseif ($order_by != 'product_quantity') { $alias = 'p.'; } $sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, MAX(product_attribute_shop.`id_product_attribute`) id_product_attribute, pl.`description`, pl.`description_short`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, pl.`available_now`, pl.`available_later`, MAX(image_shop.`id_image`) id_image, il.`legend`, m.`name` AS manufacturer_name, DATEDIFF( product_shop.`date_add`, DATE_SUB( NOW(), INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).' DAY ) ) > 0 AS new, SUM(od.`product_quantity`) AS `product_quantity` FROM ( SELECT p.`id_product` FROM `'._DB_PREFIX_.'product` p '.Shop::addSqlAssociation('product', 'p').' WHERE p.id_manufacturer = '.(int)$id_manufacturer .($active ? ' AND product_shop.`active` = 1' : '').' '.($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '').' AND p.`id_product` IN ( SELECT cp.`id_product` FROM `'._DB_PREFIX_.'category_group` cg LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)'. ($active_category ? ' INNER JOIN `'._DB_PREFIX_.'category` ca ON cp.`id_category` = ca.`id_category` AND ca.`active` = 1' : '').' WHERE cg.`id_group` '.$sql_groups.' ) ) tmp LEFT JOIN `'._DB_PREFIX_.'product` p ON (tmp.`id_product` = p.`id_product`) '.Shop::addSqlAssociation('product', 'p').' LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa ON (p.`id_product` = pa.`id_product`) '.Shop::addSqlAssociation('product_attribute', 'pa', false, 'product_attribute_shop.`default_on` = 1').' LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').') LEFT JOIN `'._DB_PREFIX_.'image` i ON (i.`id_product` = p.`id_product`)'.Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').' LEFT JOIN `'._DB_PREFIX_.'image_lang` il ON (i.`id_image` = il.`id_image` AND il.`id_lang` = '.(int)$id_lang.') LEFT JOIN `'._DB_PREFIX_.'manufacturer` m ON (m.`id_manufacturer` = p.`id_manufacturer`) '.Product::sqlStock('p', 0).' LEFT JOIN `' . _DB_PREFIX_ . 'order_detail` od ON p.`id_product` = od.`product_id` WHERE p.`id_manufacturer` = '.(int)$id_manufacturer.' '.($active ? ' AND product_shop.`active` = 1' : '').' '.($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '').' AND p.`id_product` IN ( SELECT cp.`id_product` FROM `'._DB_PREFIX_.'category_group` cg LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)'.($active_category ? ' INNER JOIN `'._DB_PREFIX_.'category` ca ON cp.`id_category` = ca.`id_category` AND ca.`active` = 1' : '').' WHERE cg.`id_group` '.$sql_groups.' ) GROUP BY product_shop.id_product ORDER BY '.$alias.'`'.bqSQL($order_by).'` '.pSQL($order_way).' LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n; $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); if (!$result) return false; if ($order_by == 'price') Tools::orderbyPrice($result, $order_way); return Product::getProductsProperties($id_lang, $result); } ////////////// public static function getFrontFeaturesStatic($id_lang, $id_product) { if (!Feature::isFeatureActive()) return array(); if (!array_key_exists($id_product.'-'.$id_lang, self::$_frontFeaturesCache)) { self::$_frontFeaturesCache[$id_product.'-'.$id_lang] = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT `name`, `value`, pf.`id_feature`, pf.`id_feature_value` FROM '._DB_PREFIX_.'feature_product pf LEFT JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature = pf.id_feature AND fl.id_lang = '.(int)$id_lang.') LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = pf.id_feature_value AND fvl.id_lang = '.(int)$id_lang.') LEFT JOIN '._DB_PREFIX_.'feature f ON (f.id_feature = pf.id_feature AND fl.id_lang = '.(int)$id_lang.') '.Shop::addSqlAssociation('feature', 'f').' WHERE pf.id_product = '.(int)$id_product.' ORDER BY f.position ASC' ); } return self::$_frontFeaturesCache[$id_product.'-'.$id_lang]; } public static function getFeaturesGroupped($features = null, $id_product = null, $id_lang = null) { $grouppedFeatures = array(); if (is_null($features) && !is_null($product_id) && !is_null($id_lang)) { $features = parent::getFrontFeaturesStatic($id_lang, $id_product); } if (!is_null($features) && !empty($features)) { foreach ($features as $featureArr) { if (!isset($grouppedFeatures[$featureArr['id_feature']])) { $grouppedFeatures[$featureArr['id_feature']] = array(); } $grouppedFeatures[$featureArr['id_feature']][] = $featureArr['value']; } } return $grouppedFeatures; } public static function getProductProperties($id_lang, $row, Context $context = null) { if (!$row['id_product']) return false; if ($context == null) $context = Context::getContext(); // Product::getDefaultAttribute is only called if id_product_attribute is missing from the SQL query at the origin of it: // consider adding it in order to avoid unnecessary queries $row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']); if (Combination::isFeatureActive() && (!isset($row['id_product_attribute']) || !$row['id_product_attribute']) && ((isset($row['cache_default_attribute']) && ($ipa_default = $row['cache_default_attribute']) !== null) || ($ipa_default = Product::getDefaultAttribute($row['id_product'], !$row['allow_oosp'])))) $row['id_product_attribute'] = $ipa_default; if (!Combination::isFeatureActive() || !isset($row['id_product_attribute'])) $row['id_product_attribute'] = 0; // Tax $usetax = Tax::excludeTaxeOption(); $cache_key = $row['id_product'].'-'.$row['id_product_attribute'].'-'.$id_lang.'-'.(int)$usetax; if (isset($row['id_product_pack'])) $cache_key .= '-pack'.$row['id_product_pack']; if (isset(self::$producPropertiesCache[$cache_key])) return array_merge($row, self::$producPropertiesCache[$cache_key]); // Datas $row['category'] = Category::getLinkRewrite((int)$row['id_category_default'], (int)$id_lang); $row['link'] = $context->link->getProductLink((int)$row['id_product'], $row['link_rewrite'], $row['category'], $row['ean13']); $row['attribute_price'] = 0; if (isset($row['id_product_attribute']) && $row['id_product_attribute']) $row['attribute_price'] = (float)Product::getProductAttributePrice($row['id_product_attribute']); $row['price_tax_exc'] = Product::getPriceStatic( (int)$row['id_product'], false, ((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null), (self::$_taxCalculationMethod == PS_TAX_EXC ? 2 : 6) ); if (self::$_taxCalculationMethod == PS_TAX_EXC) { $row['price_tax_exc'] = Tools::ps_round($row['price_tax_exc'], 2); $row['price'] = Product::getPriceStatic( (int)$row['id_product'], true, ((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null), 6 ); $row['price_without_reduction'] = Product::getPriceStatic( (int)$row['id_product'], false, ((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null), 2, null, false, false ); } else { $row['price'] = Tools::ps_round( Product::getPriceStatic( (int)$row['id_product'], true, ((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null), 2 ), 2 ); $row['price_without_reduction'] = Product::getPriceStatic( (int)$row['id_product'], true, ((isset($row['id_product_attribute']) && !empty($row['id_product_attribute'])) ? (int)$row['id_product_attribute'] : null), 6, null, false, false ); } $row['reduction'] = Product::getPriceStatic( (int)$row['id_product'], (bool)$usetax, (int)$row['id_product_attribute'], 6, null, true, true, 1, true, null, null, null, $specific_prices ); $row['specific_prices'] = $specific_prices; $row['quantity'] = Product::getQuantity( (int)$row['id_product'], 0, isset($row['cache_is_pack']) ? $row['cache_is_pack'] : null ); $row['quantity_all_versions'] = $row['quantity']; if ($row['id_product_attribute']) $row['quantity'] = Product::getQuantity( (int)$row['id_product'], $row['id_product_attribute'], isset($row['cache_is_pack']) ? $row['cache_is_pack'] : null ); $row['id_image'] = Product::defineProductImage($row, $id_lang); $row['features'] = Product::getFrontFeaturesStatic((int)$id_lang, $row['id_product']); $row['attachments'] = array(); if (!isset($row['cache_has_attachments']) || $row['cache_has_attachments']) $row['attachments'] = Product::getAttachmentsStatic((int)$id_lang, $row['id_product']); $row['virtual'] = ((!isset($row['is_virtual']) || $row['is_virtual']) ? 1 : 0); $attributesGroups = Db::getInstance()->ExecuteS(' SELECT DISTINCT pa.`id_product_attribute`, a.`id_attribute` as id_attribute ,pa.`id_product`, a.`id_attribute_group`, pai.`id_image`, i.`position` FROM `ps_product_attribute` pa LEFT JOIN `'._DB_PREFIX_.'product_attribute_combination` pac ON pac.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `'._DB_PREFIX_.'product_attribute_image` pai ON pai.`id_product_attribute` = pa.`id_product_attribute` LEFT JOIN `'._DB_PREFIX_.'image` i ON i.`id_image` = pai.`id_image` LEFT JOIN `'._DB_PREFIX_.'attribute` a ON a.`id_attribute` = pac.`id_attribute` LEFT JOIN `'._DB_PREFIX_.'attribute_group` ag ON ag.`id_attribute_group` = a.`id_attribute_group` WHERE pa.`id_product` = '.(int)$row['id_product'].' AND ag.`is_color_group` = 1 ORDER BY i.`position` DESC'); $combArray = null; foreach($attributesGroups AS $k => $combinaison){ $combArray[$combinaison['id_attribute']]['id_image']=$combinaison['id_image']; $combArray[$combinaison['id_attribute']]['id_product']=$combinaison['id_product']; $combArray[$combinaison['id_attribute']]['id_attribute']=$combinaison['id_attribute']; $combArray[$combinaison['id_attribute']]['id_product_attribute']=$combinaison['id_product_attribute']; $combArray[$combinaison['id_attribute']]['id_attribute_group']=$combinaison['id_attribute_group']; } $row['colors'] = $combArray; // Pack management $row['pack'] = (!isset($row['cache_is_pack']) ? Pack::isPack($row['id_product']) : (int)$row['cache_is_pack']); $row['packItems'] = $row['pack'] ? Pack::getItemTable($row['id_product'], $id_lang) : array(); $row['nopackprice'] = $row['pack'] ? Pack::noPackPrice($row['id_product']) : 0; if ($row['pack'] && !Pack::isInStock($row['id_product'])) $row['quantity'] = 0; $row = Product::getTaxesInformations($row, $context); self::$producPropertiesCache[$cache_key] = $row; return self::$producPropertiesCache[$cache_key]; } /** * Boost My Shop Product class override : load price from smartprice, $organization and $id_lang must be setted if $channel is null * if not, this method will return standard Prestashop price * * @param int $id_product * @param int $id_product_attribute * @param null|string $channel * @param null|string $organization * @param null|int $id_lang * @param null|int $store_id * @return float */ public static function externalPrice($id_product, $id_product_attribute, $channel = null, $organization = null, $id_lang = null, $store_id = null) { $bmsperformance = Module::getInstanceByName('bmsperformance'); if($bmsperformance->active) { return BmsperformanceClassesProduct::getPrice($id_product, $id_product_attribute, $channel, $organization, $id_lang, $store_id); } return self::getPriceStatic($id_product, true, $id_product_attribute); } /** * Boost My Shop Product class override : load shipping price from smartprice, $organization and $id_lang must be setted if $channel is null * if not, this method will return 0 * * @param int $id_product * @param int $id_product_attribute * @param null|string $channel * @param null|string $organization * @param null|int $id_lang * @param null|int $store_id * @return float */ public static function externalShipping($id_product, $id_product_attribute, $channel = null, $organization = null, $id_lang = null, $store_id = null) { $bmsperformance = Module::getInstanceByName('bmsperformance'); if($bmsperformance->active) { return BmsperformanceClassesProduct::getShippingPrice($id_product, $id_product_attribute, $channel, $organization, $id_lang, $store_id); } return 0; } /** * @param int $id_product * @param int $id_product_attribute * @return array $features */ public static function combinationFeatures($id_product, $id_product_attribute){ $features = array(); $bmsperformance = Module::getInstanceByName('bmsperformance'); if($bmsperformance->active) { return BmsperformanceClassesCombination::getProductFeatureValueForAllChannels($id_product, $id_product_attribute); } return $features; } /** * @param int $id_product * @param int $id_product_attribute * @return string $xml */ public static function combinationFeaturesAsXml($id_product, $id_product_attribute){ $xml = ''; foreach(self::combinationFeatures($id_product, $id_product_attribute) as $channel => $combinationFeature){ foreach($combinationFeature as $featureLabel => $featureValue){ $key = str_replace('_','','carl_'.$channel.'_'.$featureLabel); if(!empty($featureValue)){ $xml .= '<'.$key.'><![CDATA['.$featureValue.']]></'.$key.'>'; }else{ $product = new Product($id_product); $price = $product->getPrice(true, $id_product_attribute, 2, null, false, true, 1); $xml .= '<'.$key.'><![CDATA['.$price.']]></'.$key.'>'; } } } return $xml; } } Link to comment Share on other sites More sharing options...
Arnaud_69 Posted September 30, 2016 Share Posted September 30, 2016 OK, manufacturer_name est un alias. donc, il faut regarder dans ta base de données si tout est complet... Très franchement non pas trop .. En plus je ne gère pas la base de donnée, elle est géré par un prestataire qui ne comprend pas qu'il faut envoyer les accès. Visiblement il n'y a pas phpmyadmin dessus. Heureusement que c'est un serveur de dev haha. Mais si tu as accès à ces fichiers, tu te poses un phpmyadmin ! tu as les mots de passe, c'est pas compliqué ! Link to comment Share on other sites More sharing options...
Grafyx89 Posted September 30, 2016 Author Share Posted September 30, 2016 J'ai accès uniquement au FTP via mon client ftp Transmit, voilà d'où viennent les fichiers, mais pas à la base.. Link to comment Share on other sites More sharing options...
Arnaud_69 Posted October 1, 2016 Share Posted October 1, 2016 Et ben, tu crées un répertoire "myadminSecret" ou autre nom, tu y mets phpmyadmin, tout simplement, et tu le paramètres, et tu te connectes. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now