Jump to content

DavidCKW

Members
  • Posts

    55
  • Joined

  • Last visited

Profile Information

  • Activity
    Agency

Recent Profile Visitors

320 profile views
  • Ben

DavidCKW's Achievements

  1. Bonjour, Sur un prestashop 1.7.6.5 j'ai pleins de règles paniers, chacune associée à un client différent. Dans le back office au niveau de la liste de mes règles paniers, j'aimerai bien que le champ "Restriction de la règle à un client" puisse être visible, pour pouvoir m'y retrouver plus facilement quand les clients sont au téléphone. Est-ce que quelqu'un a une idée de comment s'y prendre, ou quel est le fichier qui gère l'affichage des règles panier dans presta svp ? Merci d'avance.
  2. Merci pour vos réponses. Je n'ai nullement indiqué que le problème était apparu à cause de la migration, c'était juste pour expliquer le contexte. Le seul module que j'ai installé ("Robot Tags - NoFollow NoIndex Manager" qui m'a rajouté les balises dans le html), c'était après avoir constaté ce problème et pour tenter de le résoudre. J'ai installé et utilisé plus d'une cinquantaine de prestashop depuis 10 ans et la version 1.5. Je sais très bien que ça n'est pas d'origine et je connais aussi très bien le fonctionnement de prestashop. N'ayant rien de spécial dans le htaccess ni dans le robot.txt, je voulais juste savoir si quelqu'un avait une idée. Merci à Eolia pour m'indiquer que ça peut venir du serveur, car je ne vois pas quel module aurait pu me rajouter ça. Je vais donc voir avec la personne qui s'occupe de la config serveur, car je pense avoir éliminé toutes les autres possibilités
  3. Merci pour votre réponse. En effet, j'ai installé le module "Robot Tags - NoFollow NoIndex Manager", pour tenter d'ajouter une information pour que google indexe mes pages, et c'est ce module qui a rajouté les balises. Mais j'ai toujours X-Robots-Tag: noindex, nofollow dans l'entête http (voir pièce jointe) et je ne comprends pas ce qui génère ça.
  4. Salut, Si tu y perds trop ton latin, desfois ça vaut le coup d'investir dans un module. J'avais acheté le module suivant, et ça permet de créer des champs clients administrables en back office et front office : https://addons.prestashop.com/fr/inscription-processus-de-commande/19736-custom-checkout-and-customer-and-address-fields-manager.html
  5. Salut, As-tu essayé de supprimer les fichiers de cache via le ftp (suppression du dossier var / cache) ?
  6. Bonjour, Après avoir migré mon site sur prestashop 1.7.6.5, et avoir soumis le nouveau sitemap, google m'indique que + de 500 pages sont en noindex, dont beaucoup de catégories et de pages produits, pourtant bien actifs. Je suis alors allé vérifié le robots.txt, qui est bien celui d'origine presta, et qui n'exclue pas ces pages. J'ai ensuite acheté le module Robot Tags - NoFollow NoIndex Manager, pour forcer l'indexation de toutes ces pages. Cela a rajouté la balise <meta name="robots" content="index" /> dans les pages. Pourtant en actualisant google, celui-ci voit toujours les pages en noindex, et je ne comprends pas pourquoi. J'ai alors testé mes urls sur un site qui vérifie l'indexation par les robots, et il me détaille que l'information est ambiguë pour un robot. En effet, via le robot.txt et via la page en question, l'information reçue est "index". Mais via "Detailed Analysis of HTTP Headers", l'information reçue est "Noindex". Exemple : https://datayze.com/index-noindex?url=https%3A%2F%2Fwww.noixdarec.com%2Ffr%2F14-portefeuille Or, en cas de doute, Google choisi le noindex. Je ne sais pas ce qui fait qu'il y a X-Robots-Tag: noindex, nofollow Si quelqu'un avait une idée pour me dire où chercher et comment virer ce X-Robots-Tag, cela m'enlèverait une énorme épine du pied, car le site en question est un gros site qui était bien référencé, et là ça pose vraiment un problème. Merci d'avance
  7. Génial lagui, ça marche !!!! Grâce à l'override, en activant le champ other pour la France, les utilisateurs peuvent renseigner ce champ en Front office. Je le vois dans la commande, mais il ne s'affiche pas dans l'adresse de la facture. C'est exactement ce que je souhaitais. Un grand MERCI à toi lagui, tu viens d'égayer ma journée et de m'enlever une épine du pied
  8. Merci pour votre retour. J'ai bien trouvé la fonction dont le code complet est le suivant : public static function generateAddress(Address $address, $patternRules = array(), $newLine = self::FORMAT_NEW_LINE, $separator = ' ', $style = array()) { $addressFields = AddressFormat::getOrderedAddressFields($address->id_country); $addressFormatedValues = AddressFormat::getFormattedAddressFieldsValues($address, $addressFields); $addressText = ''; foreach ($addressFields as $line) { if (($patternsList = preg_split(self::_CLEANING_REGEX_, $line, -1, PREG_SPLIT_NO_EMPTY))) { $tmpText = ''; foreach ($patternsList as $pattern) { if ((!array_key_exists('avoid', $patternRules)) || (is_array($patternRules) && array_key_exists('avoid', $patternRules) && !in_array($pattern, $patternRules['avoid']))) { $tmpText .= (isset($addressFormatedValues[$pattern]) && !empty($addressFormatedValues[$pattern])) ? (((isset($style[$pattern])) ? (sprintf($style[$pattern], $addressFormatedValues[$pattern])) : $addressFormatedValues[$pattern]) . $separator) : ''; } } $tmpText = trim($tmpText); $addressText .= (!empty($tmpText)) ? $tmpText . $newLine : ''; } } $addressText = preg_replace('/' . preg_quote($newLine, '/') . '$/i', '', $addressText); $addressText = rtrim($addressText, $separator); return $addressText; } Malheureusement, je ne suis pas suffisamment calé en php pour modifier la fonction et en extraire une génération qui excluerai mon champ "other"
  9. Bonjour, Sur prestashop 1.7.6, pour des raisons spécifiques, j'ai besoin qu'un champ "Autres" soit disponible dans la partie adresses, côté front office pour l'utilisateur, mais ne soit pas visible sur la facture. Je suis donc allé dans le pays en question pour rajouter le champ autres dans la liste des champs disponibles pour l'adresse (champ proposé par défaut dans l'onglet adresse). Ce champ s'affiche donc bien en FO, lors de l'inscription ou d'une modification d'adresse. De plus dans une commande, il s'affiche de façon séparée sous l'adresse (en plus de s'afficher avec les autres champs de l'adresse). Dans le pdf de la facture, il s'affiche sous les autres champs, alors que je ne voudrais pas du tout qu'il s'affiche. Je suis allé voir dans le tpl du pdf (invoice.addresses-tab.tpl) et les champs adresses sont appelés par une seule variable globale qui en globe tous les champs : {$invoice_address} Il me faudrait donc avoir une variable par champs, ainsi je pourrai les séparer et n'afficher que ceux qui m'intéressent. J'ai bien tenté d'afficher par exemple {$invoice_address.firstname} mais ça n'a pas marché. Je me doute donc qu'il va peut être falloir faire une requête spéciale à passer via un override du fichier classes/order/OrderInvoice.php pour avoir des champs différents, mais là, je sèche un peu. Quelqu'un a--t-il une idée svp ? Merci d 'avance.
  10. Pour faire les choses proprement, il ne faut pas aller modifier les fichiers du core comme indiqué pour presta 1.5, car sinon dès que presta change de version, la modif est perdue. Pour prestashop 1.6, il faut aller voir dans le dossier override/classes -------------------------------------------- Si Validate.php existe déjà, alors à l'intérieur du code class Validate extends ValidateCore { } Rajouter le code : public static function isBirthDate($date) { if (empty($date) || $date == '0000-00-00') { return false; } if (preg_match('/^([0-9]{4})-((?:0?[1-9])|(?:1[0-2]))-((?:0?[1-9])|(?:[1-2][0-9])|(?:3[01]))([0-9]{2}:[0-9]{2}:[0-9]{2})?$/', $date, $birth_date)) { if ($birth_date[1] > date('Y') && $birth_date[2] > date('m') && $birth_date[3] > date('d') || $birth_date[1] == date('Y') && $birth_date[2] == date('m') && $birth_date[3] > date('d') || $birth_date[1] == date('Y') && $birth_date[2] > date('m')) { return false; } return true; } return false; } ------------------------------------------ Si Validate.php n'existe pas, alors le créer et mettre à l'intérieur le code suivant : <?php class Validate extends ValidateCore { public static function isBirthDate($date) { if (empty($date) || $date == '0000-00-00') { return false; } if (preg_match('/^([0-9]{4})-((?:0?[1-9])|(?:1[0-2]))-((?:0?[1-9])|(?:[1-2][0-9])|(?:3[01]))([0-9]{2}:[0-9]{2}:[0-9]{2})?$/', $date, $birth_date)) { if ($birth_date[1] > date('Y') && $birth_date[2] > date('m') && $birth_date[3] > date('d') || $birth_date[1] == date('Y') && $birth_date[2] == date('m') && $birth_date[3] > date('d') || $birth_date[1] == date('Y') && $birth_date[2] > date('m')) { return false; } return true; } return false; } } Ensuite, allez dans le dossier cache et supprimez le fichier class_index.php pour vider le cache et que la modification soit prise en compte. Après ça, prestashop bloquera si la date est vide. Ensuite pour rajouter l'astérisque (c'est juste visuel mais ça n'a pas de fonction bloquante), rajoutez <sup>*</sup> à côté de {l s='Date of Birth'} dans le fichier themes/MONTHEME/authentication.tpl
  11. Pour faire les choses proprement, il ne faut pas aller modifier les fichiers du core comme indiqué pour presta 1.5, car sinon dès que presta change de version, la modif est perdue. Pour prestashop 1.6, il faut aller voir dans le dossier override/classes -------------------------------------------- Si Validate.php existe déjà, alors à l'intérieur du code class Validate extends ValidateCore { } Rajouter le code : public static function isBirthDate($date) { if (empty($date) || $date == '0000-00-00') { return false; } if (preg_match('/^([0-9]{4})-((?:0?[1-9])|(?:1[0-2]))-((?:0?[1-9])|(?:[1-2][0-9])|(?:3[01]))([0-9]{2}:[0-9]{2}:[0-9]{2})?$/', $date, $birth_date)) { if ($birth_date[1] > date('Y') && $birth_date[2] > date('m') && $birth_date[3] > date('d') || $birth_date[1] == date('Y') && $birth_date[2] == date('m') && $birth_date[3] > date('d') || $birth_date[1] == date('Y') && $birth_date[2] > date('m')) { return false; } return true; } return false; } ------------------------------------------ Si Validate.php n'existe pas, alors le créer et mettre à l'intérieur le code suivant : <?php class Validate extends ValidateCore { public static function isBirthDate($date) { if (empty($date) || $date == '0000-00-00') { return false; } if (preg_match('/^([0-9]{4})-((?:0?[1-9])|(?:1[0-2]))-((?:0?[1-9])|(?:[1-2][0-9])|(?:3[01]))([0-9]{2}:[0-9]{2}:[0-9]{2})?$/', $date, $birth_date)) { if ($birth_date[1] > date('Y') && $birth_date[2] > date('m') && $birth_date[3] > date('d') || $birth_date[1] == date('Y') && $birth_date[2] == date('m') && $birth_date[3] > date('d') || $birth_date[1] == date('Y') && $birth_date[2] > date('m')) { return false; } return true; } return false; } } Ensuite, allez dans le dossier cache et supprimez le fichier class_index.php pour vider le cache et que la modification soit prise en compte. Après ça, prestashop bloquera si la date est vide. Ensuite pour rajouter l'astérisque (c'est juste visuel mais ça n'a pas de fonction bloquante), rajoutez <sup>*</sup> à côté de {l s='Date of Birth'} dans le fichier themes/MONTHEME/authentication.tpl
  12. Ok. Désolé, comme j'ai viré les onglets de mon site, je ne peux pas tester mes idées. Mais tu as raison, le double ID pose problème en javascript. On va traiter le problème différemment en utilisant du js. Ce qu'on peut faire, c'est à chaque fois que l'on détecte un changement ajax (un changement de déclinaison est un changement ajax), on va aller piquer la nouvelle valeur de la référence qui a du se mettre à jour dans l'onglet, et on va la coller dans notre référence affichée en haut de la page. Pour cela, en haut de page, on ne va plus utiliser l'id product-detail, et on va mettre le code suivant (au passage j'ai changé la classe product-reference par product-reference-page pour qu'il n'y ait pas de confusion entre les 2 références) : <div class="wrapper-product-on-page"> {block name='product_reference'} {if isset($product.reference_to_display)} <div class="product-reference-page"> <label class="label">{l s='Reference' d='Shop.Theme.Catalog'} </label> <span itemprop="sku">{$product.reference_to_display}</span> </div> {/if} {/block} </div> Ensuite dans le fichier /themes/MONTHEME/assets/js/custom.js on va rajouter le code suivant : (function ($, window, document, undefined) { //Ne pas remettre ces lignes si c'est déjà présent deans le fichier function changeReference() { if ($('body').hasClass('page-product')) { //Si on est sur la page produit var newReference = $('.product-reference span').text(); //On va chercher la valeur actulisée de la référence $('.wrapper-product-on-page span').text(newReference); //On la met dans le span en haut de page } } $( document ).ready(function() { //On lance notre fonction au chargement de la page changeReference(); }); $(document).ajaxComplete(function () { //On relance la fonction à chaque mise à jour ajax changeReference(); }); })(jQuery, this, this.document); ////Ne pas remettre ces lignes si c'est déjà présent deans le fichier Si ça ne fonctionne toujours pas, je suis à peu près sûr que j'arriverai à le faire directement sur ton site.... Sinon, il faut que je ré-installe un presta tout neuf en développement et je n'ai pas trop le temps en ce moment.
  13. Ok. Le fonctionnement de prestashop est le suivant : Lorsque l'on choisit une autre déclinaison, il met à jour la div qui a pour id product-details. Dans cette div, il remet tout le contenu du fichier product-details.tpl. En attendant de trouver une méthode plus "propre", ce que je propose, c'est de mettre dans le fichier product-details.tpl tout le contenu (celui que l'on veut hors de l'onglet, et celui que l'on veut à l'intérieur de l'onglet). Sauf que l'on va séparer ce contenu dans 2 div différentes. Ainsi, que l'on soit dans le détail de la page, ou dans l'onglet tout le contenu sera chargé normalement. Mais en css, on va masquer ce qui nous intéresse pas. Lorsque l'on est dans la page, on va masquer le contenu de l'onglet. Et lorsque l'on est dans l'onglet, on va masquer le contenu de la page. Concrètement, dans le fichier product-details.tpl on va laisser toutes les classes d'origine sur la div product-details, mais on rajoute 2 divs avec les classes respectives suivantes : product-detail-on-page et product-detail-on-tab Ce qui donne pour tout le fichier : <div class="tab-pane fade{if !$product.description} in active{/if}" id="product-details" data-product="{$product.embedded_attributes|json_encode}" role="tabpanel" > <!-- Dans cette partie, on conserve tous les champs que l'on veut extraire de l'onglet --> <div class="product-detail-on-page"> {block name='product_reference'} {if isset($product_manufacturer->id)} <div class="product-manufacturer"> {if isset($manufacturer_image_url)} <a href="{$product_brand_url}"> <img src="{$manufacturer_image_url}" class="img img-thumbnail manufacturer-logo" alt="{$product_manufacturer->name}"> </a> {else} <label class="label">{l s='Brand' d='Shop.Theme.Catalog'}</label> <span> <a href="{$product_brand_url}">{$product_manufacturer->name}</a> </span> {/if} </div> {/if} {if isset($product.reference_to_display) && $product.reference_to_display neq ''} <div class="product-reference"> <label class="label">{l s='Reference' d='Shop.Theme.Catalog'} </label> <span itemprop="sku">{$product.reference_to_display}</span> </div> {/if} {/block} <!-- Déplacer ici d'autres blocs si vous voulez extraire d'autres blocs de l'onglet --> </div> <!-- Dans cette partie, on conserve tous les champs que l'on veut afficher dans l'onglet --> <div class="product-detail-on-tab"> {block name='product_quantities'} {if $product.show_quantities} <div class="product-quantities"> <label class="label">{l s='In stock' d='Shop.Theme.Catalog'}</label> <span data-stock="{$product.quantity}" data-allow-oosp="{$product.allow_oosp}">{$product.quantity} {$product.quantity_label}</span> </div> {/if} {/block} {block name='product_availability_date'} {if $product.availability_date} <div class="product-availability-date"> <label>{l s='Availability date:' d='Shop.Theme.Catalog'} </label> <span>{$product.availability_date}</span> </div> {/if} {/block} {block name='product_out_of_stock'} <div class="product-out-of-stock"> {hook h='actionProductOutOfStock' product=$product} </div> {/block} {block name='product_features'} {if $product.grouped_features} <section class="product-features"> <p class="h6">{l s='Data sheet' d='Shop.Theme.Catalog'}</p> <dl class="data-sheet"> {foreach from=$product.grouped_features item=feature} <dt class="name">{$feature.name}</dt> <dd class="value">{$feature.value|escape:'htmlall'|nl2br nofilter}</dd> {/foreach} </dl> </section> {/if} {/block} {* if product have specific references, a table will be added to product details section *} {block name='product_specific_references'} {if !empty($product.specific_references)} <section class="product-features"> <p class="h6">{l s='Specific References' d='Shop.Theme.Catalog'}</p> <dl class="data-sheet"> {foreach from=$product.specific_references item=reference key=key} <dt class="name">{$key}</dt> <dd class="value">{$reference}</dd> {/foreach} </dl> </section> {/if} {/block} {block name='product_condition'} {if $product.condition} <div class="product-condition"> <label class="label">{l s='Condition' d='Shop.Theme.Catalog'} </label> <link itemprop="itemCondition" href="{$product.condition.schema_url}"/> <span>{$product.condition.label}</span> </div> {/if} {/block} </div> </div> Ensuite dans le fichier product.tpl à l'endroit où l'on veut mettre les références on peut laisser le code que j'avais mis dans mon précédent post, mais on va rajouter une classe pour pourvoir identifier qu'il s'agit de la div qui n'est pas dans l'onglet : <div id="product-details" class="wrapper-product-on-page"> {block name='product_reference'} {if isset($product.reference_to_display)} <div class="product-reference"> <label class="label">{l s='Reference' d='Shop.Theme.Catalog'} </label> <span itemprop="sku">{$product.reference_to_display}</span> </div> {/if} {/block} </div> Ce contenu se charge au lancement de la page, et se met ensuite à jour au changement de déclinaison Enfin, il ne nous reste plus qu'a rajouter des lignes css pour obtenir ce que l'on veut (par exemple dans le fichier /themes/MONTHEME/assets/css/custom.css) On masque le contenu de l'onglet qui serait chargé dans la page : .wrapper-product-on-page .product-detail-on-tab {display: none;} On masque le contenu de la page qui serait dans l'onglet : .tab-pane .product-detail-on-page {display: none;} En théorie ça marche. Il faut que je fasse des test pour m'en assurer
  14. Salut Ben, Peux-tu me préciser ce que tu cherches à faire précisément ? Si je comprends bien, tu veux extraire la référence de l'onglet, faire en sorte qu'elle change lorsqu'on change de déclinaison, et garder le reste des champs dans l'onglet, c'est bien ça ?
×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More