Jump to content

Search the Community

Showing results for tags 'astuce'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Community Help and Support
    • PrestaShop Download
    • PrestaShop Marketplace
  • News and Announcements
    • PrestaShop news and releases
    • PrestaShop Beta
    • PrestaShop Blogs
    • PrestaShop Meetups
  • International community (English)
    • General topics
    • PrestaShop Merchants
    • PrestaShop Developers
    • Taxes, Translations & Laws
    • Community Modules and Themes
  • Forum francophone
    • Discussion générale
    • Aide et support communautaire
    • PrestaShop pour les marchands
    • PrestaShop pour les développeurs
    • Adaptation aux lois Québécoises
    • Modules et thèmes gratuits
    • Modules et thèmes payants
  • Foro en Español
    • Discusión general
    • Soporte de la comunidad y ayuda
    • Comerciantes PrestaShop
    • Desarrolladores PrestaShop
    • Módulos y plantillas gratuitas
  • Forum italiano
    • Forum generale
    • Aiuto e supporto della Community
    • Commercianti PrestaShop
    • Sviluppatori PrestaShop
    • Aspetti legali sull'eCommerce
    • Moduli e template gratuiti
  • Deutsches Forum
    • Generelle Fragen
    • Support und Hilfe aus der Community
    • e-Commerce/Versand-Handel mit Prestashop
    • Prestashop-Entwickler
    • Anpassung an deutsches Recht
    • Kostenlose Module und Templates
    • Generelle Fragen Copy
  • Nederlandstalig forum
    • Algemeen
    • Hulp en ondersteuning, van en voor de community
    • PrestaShop-winkeliers
    • PrestaShop-ontwikkelaars
    • Het aanpassen van PrestaShop
    • Gratis modules en templates
  • Fórum em Português
    • Fórum Geral
    • Ajuda e Suporte da Comunidade
    • Lojistas que utilizam o PrestaShop
    • Desenvolvedores PrestaShop
    • Legislação específica
    • Módulos e temas gratuitos
  • Polskie forum
    • Forum ogólne
    • Wsparcie i pomoc użytkowników
    • Oferty twórców PrestaShop
    • Deweloperzy PrestaShop
    • Darmowe Moduły i Szablony
  • Dansk forum
    • Generelt forum
    • Hjælp og support fra fællesskabet
    • PrestaShop for købmænd
    • PrestaShop for udviklere
    • Love og regler
    • Gratis moduler og temaer
  • České fórum
    • Instalasi, Konfigurasi dan upgrade
    • Obecná diskuze
    • Bezplatné moduly a šablony
    • PrestaShop vývojáři
    • PrestaShop obchodníci
  • Bahasa Indonesia
    • Diskusi Umum
    • Podpora a pomoc komunity
    • Laporan Bug
    • Jasa, Promosi & Lowongan Kerja
  • Svenskt forum
    • Allmän diskussion
    • Installation, konfigurering och uppdatering
  • Forumul românesc
    • Discuţii generale
    • Instalare, configurare şi upgrade
  • Pусский язык
    • Обсуждение скрипта
    • Установка, Настройка, Обновление
    • Прием багов
  • Slovenské fórum
    • Všeobecná diskusia
    • Podpora a pomoc komunity
    • PrestaShop obchodníci
    • PrestaShop vývojári
    • Bezplatné moduly a šablóny
  • Türkçe Topluluğu
    • Genel Konular
    • Topluluk desteği ve yardım
    • PrestaShop Tüccarları
    • Prestashop Geliştiricileri
    • Ücretsiz Modül ve Temalar
  • Diễn đàn tiếng Việt
    • Thảo luận chung
    • Hỗ trợ từ cộng đồng
    • Dành cho chủ doanh nghiệp / cửa hàng
    • Dành cho lập trình viên
  • PrestaShop Communities
    • اللغه العربيه [Arabic]
    • Ελληνικά [Greek]
    • עִבְרִית [Hebrew]
    • 中文
    • Magyar [Hungarian]
    • 日本語 [Japanese]
    • Lietuviškai [Lithuanian]
    • انجمن فارسی [Persian]
    • ไทย [Thai]
    • Malaysia [Malaysian]
    • Eesti [Estonian]
    • Slovenščina [Slovenian]
    • Српски [Serbian]
  • IP. Board Forum
    • IP. Board Forum Questions and Issues
  • Archive
    • Zapłać Moduły i Szablony [ARCHIVE]
    • Moduly, upravy a dizajn [ARCHIVE]
    • Phát triển và các mô-đun [ARCHIVE]
    • Yazılım, Modül ve Tema [ARCHIVE]
    • Модули, Шаблоны [ARCHIVE]
    • Module şi teme [ARCHIVE]
    • Pengembangan dan Modul [ARCHIVE]
    • Moduler och teman [ARCHIVE]
    • Ecommerce x PrestaShop [ARCHIVE BOARD]
    • Vývoj a moduly [ARCHIVE]
    • Kostenpflichtige Module, Templates [ARCHIVE]
    • Módulos y temas pagos [ARCHIVE]
    • Módulos e temas pagos [ARCHIVE]
    • Servizi commerciali [ARCHIVE]
    • Forum - Feedback Contributor
    • PrestaShop Cloud

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Found 13 results

  1. Bonjour, Je vous partages une petite astuce (Grand Merci au Foum et à Vous) pour afficher en Verticale sur votre page Produit, les petites images (thumbs_list) au lieu d'un affichage Horizontal. Ceci, une fois appliqué, ils vous faudras modifiez votre "product.css" Cette modification fonctionne sur Prestashop 1.5. Ouvrir => /thèmes/defaut/js/product.js Ligne 481: $('#thumbs_list_frame').scrollTo('li:eq(0)', 700, {axis:'x'}); Remplacer par: $('#thumbs_list_frame').scrollTo('li:eq(0)', 700, {axis:'y'}); Ligne 492: var thumb_width = $('#thumbs_list_frame >li').width()+parseInt($('#thumbs_list_frame >li').css('marginRight')); $('#thumbs_list_frame').width((parseInt((thumb_width)* i) + 3) + 'px'); // Bug IE6, needs 3 pixels more ? Remplacer par: var thumb_height = $('#thumbs_list_frame >li').height()+parseInt($('#thumbs_list_frame >li').css('marginRight')); $('#thumbs_list_frame').height((parseInt((thumb_height)* i) + 3) + 'px'); // Bug IE6, needs 3 pixels more ? OUVRIR => /thèmes/default/css/product.css Ligne 7: #pb-right-column {float: left;width: 266px;} Remplacer par: #pb-right-column {float: left;width: 350px;} Ligne 46: #pb-right-column #views_block {margin-top: 10px;width: 266px;} Remplacer par: #pb-right-column #views_block {margin-top: 10px;height: 266px;width:80px;float:left} Ligne 51: #thumbs_list {float: left;margin-left: 4px;overflow: hidden;width: 216px;} Remplacer par: #thumbs_list {float: left;margin-left: 4px;overflow: hidden;height: 216px;} OUVRIR => /thèmes/default/product.tpl Ligne 190 @ 211, Sélectionner et Couper: {if isset($images) && count($images) > 0} <!-- thumbnails --> <div id="views_block" class="clearfix {if isset($images) && count($images) < 2}hidden{/if}"> {if isset($images) && count($images) > 3}<span class="view_scroll_spacer"><a id="view_scroll_left" class="hidden" title="{l s='Other views'}" href="javascript:{ldelim}{rdelim}">{l s='Previous'}</a></span>{/if} <div id="thumbs_list"> <ul id="thumbs_list_frame"> {if isset($images)} {foreach from=$images item=image name=thumbnails} {assign var=imageIds value="`$product->id`-`$image.id_image`"} <li id="thumbnail_{$image.id_image}"> <a href="{$link->getImageLink($product->link_rewrite, $imageIds, 'thickbox')}" rel="other-views" class="thickbox {if $smarty.foreach.thumbnails.first}shown{/if}" title="{$image.legend|htmlspecialchars}"> <img id="thumb_{$image.id_image}" src="{$link->getImageLink($product->link_rewrite, $imageIds, 'medium')}" alt="{$image.legend|htmlspecialchars}" height="{$mediumSize.height}" width="{$mediumSize.width}" /> </a> </li> {/foreach} {/if} </ul> </div> {if isset($images) && count($images) > 3}<a id="view_scroll_right" title="{l s='Other views'}" href="javascript:{ldelim}{rdelim}">{l s='Next'}</a>{/if} </div> {/if} {if isset($images) && count($images) > 1}<p class="resetimg clear"><span id="wrapResetImages" style="display: none;"><img src="{$img_dir}icon/cancel_11x13.gif" alt="{l s='Cancel'}" width="11" height="13"/> <a id="resetImages" href="{$link->getProductLink($product)}" onclick="$('span#wrapResetImages').hide('slow');return (false);">{l s='Display all pictures'}</a></span></p>{/if} Coller le code en dessous de la Ligne 176: <!-- right infos--> <div id="pb-right-column"> <!-- product img--> <div id="image-block"> =======COLLER LE CODE ICI======= Ils ne vous restent plus qu'a modifier votre "product.css" a fin d'obtenir l'affichage que vous désirez et remplacer les flêches du scroll par des flêches "haut" "bas" ou tout simplement ajouter un "display:none" pour les désactivés.
  2. Bonjour, Pour ceux que ça intéresse voila le code inséré sur Prestashop 1.6.1.4 - Attention je ne suis pas sur du bon fonctionnement même si sur le site de test cela fonctionne. Vu que je ne suis pas pour (même pour 35€) achetés des modules à Prestashop car ce sont pour moi des réglages de base qui devrait être présent dans la solution au lieu de nous les faire acheter. Et surtout pour corriger des bug Prestashop la presta team n'est jamais la et fait n'importe quoi. Mais pour nous vendre des modules inutiles la ils sont opérationnels. (une autre discussion) Donc pour en revenir à notre modification prenons en exemple avec le dernier module Paypal à ce jour. Sur la page OPC ça se met bien à jour lorsque l'on change les quantités. C'est basé sur le total du panier inclus port et taxes. Dans la fonction hookPayment de paypal.php (env ligne 624 sur la dernière version à ce jour) ajouter : { $total = floatval(number_format($params['cart']->getOrderTotal(true, 3), 2, '.', '')); if ($total<20) { return false; } } Ceci enlève Paypal pour les montant de moins de 20€ (changer 20 par la valeur désiré)
  3. Bonjour! Bonjour! Une nouvelle contribution aujourd'hui, la 3eme! ceci comme toujours graçe au forum et à vous! - Fonctionne sur Prestahop 1.5 OUVRIR ==> /modules/homefeatured/homefeatured.php Ligne 102: $products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 10)); Remplacer par: $products = $category->getProducts((int)Context::getContext()->language->id, 1, ($nb ? $nb : 10),NULL,NULL,false,true,true,($nb ? $nb : 50)); 50 = Nombre Total de Produits Aléatoire. (Vérifier dans le BO vos Produits en "Catégorie => Accueil") 10 = Nombre de Produits Phares à afficher.
  4. Voici comment pour ajouter le logo de la marque d’un article et rendre ainsi la fiche produit plus professionnelle. Nous partons du principe que nous gérons les marques avec la notion de fabricant (manufacturer).
  5. Bonjour, Aujourd'hui je partage une ch'tite astuce, que je viens de mettre en application avec succès Pour créer le symbole de Copyright quand on est sur un pc : Il faut appuyer simultanément sur Alt tout en tapant 0169 = © Si vous travaillez sur mac : Saisissez Option + G Cette astuce vaut pour tous ceux qui n'achètent pas un thème tout fait et qui ont mis les mains dans le cambouis pour créer et ou modeler l'aspect graphique de leur boutique. Je vous souhaite une bonne après-midi à tous et à toutes.
  6. Bonsoir la communauté, Je vais donc lister ici tous les trucs et astuces sur la 1.5.6 qui permettront j'espère de solutionner certains de vos tracas. Testé et approuvé par mes soins. Je vais essayer d'être concise mais ne me demandez pas d'assistance ;-) J'ai po le temps !!!! CONCERNANT LES IMAGES En multiboutique, si vous régénérez toutes les images produits, cela permettra d'avoir toutes les bonnes liaisons entre les produits et les images. Quelques fois, les associations se font mal et donc il y a des problèmes d'affichage sur les différentes boutiques. Si il n'y a qu'une image, elle sera par défaut la photo principale (cover = 1) et en position 1. Pour plus de précision, intervenez sur la base de données dans la table ps_image_shop et passez toutes les images ayant une position 1 en cover 1. Oui je sais, si votre photo par défaut est celle en position 2, ça pose un problème... oui je sais mais là, je n'ai pas trouvé de solution sinon que celle de faire cela à la main!!!! Oui je sais aussi qu'il serait intelligent de télécharger en premier l'image de couverture... mais chacun fait comme il a envie heinnnn !!! Ensuite, si pour certains vous n'avez pas encore de photos, personnalisez les photos par défaut qui se trouvent dans le dossier img/p/. Ce sera toujours plus agréable que l'image initiale de PS (mettez du texte ou une autre image). CONCERNANT L'IMPORT Choisissez la boutique par défaut, importez votre csv avec une colonne IDSHOP contenant l'ID de la boutique sur laquelle vous souhaitez importer les informations. Cela évitera de modifier l'ID SHOP par défaut dans la base de données qui génère pas mal de soucis. Vous pouvez modifiez le nom, la description courte, la description longue, les métas, les prix, url réécrite... pour chaque boutique pour pouvoir personnaliser vos produits. Concernant les catégories : je cherche encore comment modifier description et métas sans modifier la boutique par défaut. Là il y a un vrai soucis ! ATTENTION : lors de l'import d'un csv, le fait de mapper une colonne avec "ignorer cette colonne" crée des problèmes. CONCERNANT LES PRIX Vous pouvez cumuler une baisse de prix par un groupe client et par une règle de prix catalogue. Celle du groupe client passe en premier. CONCERNANT LA SAUVEGARDE Par cron: La sauvegarde de la base de données : mysqldump --user=X1 --password=X2 X3 > /var/www/vhosts/.../DOSSIERDESAUVEGARDE/BACKUP-`/bin/date +\%Y\%m\%d`.sql Remplacez X1, X2 et X3(nom de la base de données) et /.../ par le chemin complet jusqu'à votre dossier de sauvegarde. La sauvegarde des fichiers : tar -cvzf /var/www/vhosts/.../DOSSIERDESAUVEGARDE/backupfichiers-`/bin/date +\%Y\%m\%d`.tar.gz /var/www/.... Remplacez /.../ par le chemin complet et remplacez /.... par le chemin jusqu'à la racine de votre site. Pensez à récupérer sur un disque dur externe vos sauvegardes tous les jours. CONCERNANT LE MODULE DE NAVIGATION A FACETTE Si vous faites une réindexation (url, prix ou attribut), le module disparait du site. Donc inutile d'en faire tous les jours. Faites-le uniquement lors de l'ajout de nouveaux produits ou de modification de prix, d'url ou de caractéristiques. Ensuite, allez dans la configuration du module, choisissez le modèle, cliquez sur le choix des catégories et validez. Même si le nombre de catégories sélectionnées n'est pas affiché, elles sont quand même en mémoire dans le modèle donc validez tout simplement. Puis enregistrez le modèle et votre bloc réapparaitra. Vous pouvez ajouter des images ou des informations supplémentaires sur la fiche produit ou sur la liste des produits en utilisant les caractéristiques (voir mon site pour les pictos des hommes, femmes,livraison gratuite (que je vais modifier encore pour l'améliorer) et nouveau (que je vais bientôt ajouter). Vous n'êtes pas obligé de faire afficher un filtre dans la navigation à facette pour ces caractéristiques. Un exemple : Pour une promo ou une mise en avant ou définir un top vente, ajouter une caractéristique par un import pourrait être plus rapide que de mettre les produits dans une catégorie. Vous pourriez aussi créer une page "Promo" qui serait un doublon de product-list avec des infos supplémentaires grâce à ses caractéristiques. CONCERNANT VOTRE BLOG Connectez-vous à votre blog par word, c'est plus rapide et bien plus pratique : http://www.blogoergosum.com/2303-guide-publier-sur-wordpress-depuis-word-2007 Ensuite, importez vos articles en masse grâce à CSV importer (chargez le plugin par votre blog) et vous pouvez même programmer à l'avance la publication... MAGIQUE !!! CONCERNANT LA BASE DE DONNEES Encore une astuce pour effectuer une requête sur votre base de donnée par une tâche cron : mysql -u user_name -p password basededonnees -e "commande1;commande2" Remplacez user_name par le nom de l'utilisateur, password par le mot de passe et basededonnees par le nom de la base de données. J'en ai encore plein d'autres alors je les ajouterai au fur et à mesure que le temps me le permettra. N'hésitez pas à faire partager vos trucs, je les remonterai sur mon post pour centraliser l'info.
  7. Bonjour Je créé ce topic qui ne sera modifiable que par les modérateurs afin qu'il soit préservé de post inutile ou du spam. Dans ce topic seront recensées toutes les astuces que les membres de la communauté ont proposées et mises en pratique. Pour qu'une astuce soit présente dans ce topic, merci de vous référer à un modérateur. -------------------------- Nouvelle astuce par : @Schwitchboard Afficher les adresses IP de tous les visiteurs dans l'administration : http://www.prestasho...-les-visiteurs/
  8. Bonsoir, Je vous propose ma 2eme contribution, une petite astuce fort sympathique! Cette astuce va vous permetres d'ajouter la Marque (manufacturer) dans le Titre/Nom du produit sur la Page Produit avec Redirection en Lien vers tous les produits de cette Marque. - Fonctionne sur Prestashop 1.5 / 1.4 / OUVRIR => /thème/default/product.tpl Ligne 223: <h1>{$product->name|escape:'htmlall':'UTF-8'}</h1> Remplacer par: <h1>{$product->name|escape:'htmlall':'UTF-8'}<a href="{$link->getmanufacturerLink($product->id_manufacturer, $product->link_rewrite)}"style="color:#000;font-size:12px;"> ({$product->manufacturer_name|escape:'htmlall':'UTF-8'})</a></h1> Vous pouvez personaliser la Couleur et la Taille de la Police dans le Code remplacé ci dessus.
  9. Salut Je me permet de décrire ici une astuce que j'utilise pour être notifié des paniers abandonnés lors du paiement. J'ai regardé ce que proposait Prestashop et les modules payants mais je n'ai pas été convaincu, car je ne veux pas d'une solution qui contact directement le client, je préfère le faire moi même. Et accessoirement je n'étais pas prêt à dépenser plus de 100 euros pour cela. Finalement j'ai trouvé dans ma solution de paiement Payzen un astuce qui me semble intéressante. Dans Payzen il y a une fonction qui s'appelle les règles de notification, cela me permet de recevoir un SMS quand un paiement a été effectué, c'est utile pour moi car je ne suis pas devant l'ordinateur toute la journée. J'ai joué un peu avec les fonctions de notification disponibles et j'en ai adaptée une à mon besoin : dans le cas où le client abandonne sa commande lors du paiement et même s'il ferme la fenêtre de son navigateur et si le montant de la commande est supérieur au montant que j'ai indiqué Payzen va m'envoyer un mail J'ai configuré le texte du message avec l'url pour accéder aux paniers en un clic Ensuite il ne me reste plus qu'à contacter le client, par téléphone ou mail pour le convaincre ou l'aider à finaliser sa commande. J'ai fait de même pour les paiements refusés par la banque du client, quand c'est lié à un plafond dépassé je lui propose de finaliser sa commande par un autre moyen.
  10. Bonjour à tous. Suite à une erreur dans le fichier xls généré pour Google merchant, nous avions tous les liens des images des produits que nous désirions référencer chez eux depuis prestashop, erronés. Quand il s'agit de deux ou trois erreurs, à la main ça va vite à corriger. Mais quand il s'agit de 269 erreurs, là il faut trouver une solution pour éviter de se taper les corrections pendant trois jours... J'ai écris cette routine afin de, à partir de la liste de liens générés par Google merchant, retrouver les images idouane et qu'elles correspondent avec leurs liens respectifs, afficher, copier/coller dans le bloc-note, par exemple, la liste ainsi recréée, corriger les erreurs puis réintroduire la colonne d'url d'images dans la feuille de calcul Google merchant et recharger le flux (déjà que Google merchant est une usine à gaz inutilement redondante d'absurdités...). J'espère avoir été clair jusque là. Ci dessous le code php (qui aurait sûrement pu être optimisé ou en utilisant PDO mais pas fait pour des raisons de version php de différents serveurs): /* ***** listing.php à poser à la racine de prestashop (au plus simple) ***** */ <?php $op = $_POST["op"]; $mode = $_POST["mode"]; // Dessous, les url sont à importer de la liste que Google merchant génère, donc uniquement les produits en erreur dans leur feuille de calcul $tableau = array('url1'=>'http://www.lemagasin.com/product.php?id_product=xxx','url2'=>'...ecaetera...'); if (!$op) { foreach($tableau as $valeur) { echo "<pre>"; echo $valeur ,'<br/>'; echo "</pre>"; } // Affichage des couples clé / valeur //foreach($tableau as $cle => $valeur) //{ //echo $cle ,' : ', $valeur ,'<br/>'; //} echo "<pre>"; ?> <form action="listing.php" method="post" enctype="multipart/form-data" name="tracer" target="_self"> <input name="op" type="hidden" value="start" /> <label>Type d'affichage</label></br> <label>Mode texte</label><input name="mode" type="radio" value="text" checked /> <label>Mode image</label><input name="mode" type="radio" value="pic" /> <input name="" type="submit" value="Tracer" /> </form> <?php echo "</pre>"; } else { $countvalues = count(array_values($tableau));// on compte le nombre de valeurs dans le array $tableau en haut if($mode=="pic")// mode pictures pas nécessaire mais c'est juste pour visualiser si les images sont bien présentes et conformes { // Ci dessous, à part <table>, les 4 colonnes entre <tr></tr> pas forcément nécessaires ?> <table> <tr> <th style="width:<?php echo round(100/$nbCols);?>%;"></th> <th style="width:<?php echo round(100/$nbCols);?>%;"></th> <th style="width:<?php echo round(100/$nbCols);?>%;"></th> <th style="width:<?php echo round(100/$nbCols);?>%;"></th> </tr> <?php } $nbCols = 4; // nombre de colonnes du tableau $cpt = 0; // compteur d'éléments // Mise en tableau, adaptée du tuto viPHP http://forum.phpfrance.com/faq-tutoriels/nombre-colonnes-dynamique-operateur-modulo-t241626.html while ($cpt<=$countvalues/6) // $countvalues=la totalité des arrays du $tableau et /6 car sinon on se retrouve avec 2x2 doublons donc 4 fois la même image à chaque image... { // parcours des résultats // début d'une ligne if ($cpt%$nbCols==0) // on divise le nb d'élément par le nb de colonnes. Si le reste est de 0 ... echo '<tr>'; // ..., alors on est sur le premier élément d'une ligne // On place chaque élément dans une cellule du tableau for ($i=1; $i<$countvalues+1; $i++) { $adresse = $tableau['url'.$i]; $handle = @fopen($adresse, "r"); $contents = @file_get_contents($adresse); @fclose($handle); //Recherche des liens $pattern = '/<div id="image-block">(.*?)<\/div>/si'; if(preg_match_all($pattern, $contents, $matches)) { foreach($matches as $values) { if (preg_match('/src="([^"]+)"/i', $values[0], $matches)) { $imageUrl = $matches[1]; switch ($mode) { case "text": //Afficher en mode text echo "<td></td></tr><pre>"; echo $adresse.' => ' .$matches[1]. '<br>'; echo "</pre><tr><td></td>"; break; case "pic": //Afficher en mode images echo '<td><a href="'.$adresse.'" target="_blank"><img src="'.$matches[1].'" border="0" /></a></td>'; break; } } break; } } // fin d'une ligne if ($cpt%$nbCols==($nbCols-1)) // on divise le nb d'élément par le nb de colonnes. Si le reste est de ($nbCols-1) ... echo '</tr>'; // ..., on est sur le dernier élément d'une ligne $cpt++; // on incrémente le compteur pour savoir où on en est } // Au cas où ... if ($cpt!=0 && $cpt%$nbCols!=0) { // S'il n'y a pas eu assez de cellules dans la boucle pour finir la ligne ... echo '<td colspan="'.($nbCols - ($cpt%$nbCols) ).'"> </td>'; // ... on complète avec une cellule vide de la bonne taille... echo '</tr>'; // ... et on ferme la ligne } } ?> </table> <?php } ?> Cela peut être utile pour ceux qui seraient dans mon cas et ce source peut être adapté pour différentes applications. Cordialement. SagittariuS
  11. Marre de toujours utiliser "Bienvenue" (welcome) pour saluer vos visiteurs... Rendez votre site intelligent (ou presque) et polie ! Apprenez-lui à lire l'heure et saluez vos visiteurs en conséquence. PrestaTIPS - BONJOUR BONSOIR - PRESTASHOP.pdf
  12. Bonjour, J'ai pensé que ca pourrait toujours servir à quelqu'un d'overrider une AdminTab core. Je vous donne ma méthode ci-dessous donc. L'exemple, c'est l'override de l'AdminCatalog mais ca marche avec tout. 1. structure du module + /modules/nom_module + classes (répertoire - si besoin) + js (répertoire - si besoin) + css (répertoire - si besoin) + ...etc (autres répertoires - si besoin) - AdminCatalog.gif (logo de l'AdminTab à overrider ou à étendre) - AdminCatalog.php (AdminTab à overridé ou à étendre) - nom_module.php ('controlleur' du module) - en, es, fr.php (fichiers de trads) - license.txt (license du module, si besoin) - logo.gif (votre logo) 2. 'Détournement' de la classe Core à l'install du module L'idée est simple, il s'agit de prévenir Prestashop que la classe AdminCatalog qui sera utilisée sera désormais celle du module, et ca passe par une gestion des onglets directement via la base de données. Pour ca, j'ai 2 fonctions : - Remplacement de l'endroit de référence de l'AdminTab par celle du module (pour l'install) - Remise en l'état de l'AdminTab de référence (pour la désintall) Fonction de déclaration de l'override : /** * Update a tab classname from a module * * @author Luc Lérot Freelance <[email protected]> * * @param string $originalTabClassName Orignal class name of the tab to replace * @param array $newTabClassName Class name of new tab * @param bool $changeTabIcon Add or not module icond to new tab * @return bool */ public function changeAdminTabClass($originalTabClassName, $newTabClassName, $changeTabIcon=false) { //Manage Tab Icon if ($changeTabIcon) { @copy(_PS_MODULE_DIR_.$this->name.'/logo.gif', _PS_IMG_DIR_.'t/'.$newTabClassName.'.gif'); @copy(_PS_MODULE_DIR_.$this->name.'/logo.gif', _PS_MODULE_DIR_.$this->name.'/'.$newTabClassName.'.gif'); } else { @copy(_PS_IMG_DIR_.'t/'.$originalTabClassName.'.gif', _PS_IMG_DIR_.'t/'.$newTabClassName.'.gif'); @copy(_PS_IMG_DIR_.'t/'.$originalTabClassName.'.gif', _PS_MODULE_DIR_.$this->name.'/'.$newTabClassName.'.gif'); } //Get id from original Tab class $idTab = Tab::getIdFromClassName($originalTabClassName); //If found, proceed to override if($idTab != 0) { $tab = new Tab ($idTab); $tab->class_name = $newTabClassName; $tab->module = $this->name; return $tab->save(); } return false; } Fonction de remise en état : /** * Reset a tab from a module * * @author Luc Lérot Freelance <[email protected]> * * @param string $originalTabClassName Original class name of the tab * @param string $replacedByTabClassName Class name that replaced the orginal one * @param string $originalTabModule Module name of original tab * @return bool */ public function resetAdminTabClass ($originalTabClassName, $replacedByTabClassName, $originalTabModule=null) { $idTab = Tab::getIdFromClassName($replacedByTabClassName); if($idTab != 0) { $tab = new Tab ($idTab); $tab->class_name = $originalTabClassName; $tab->module = $originalTabModule; return $tab->save(); } return false; } 3. Utilisation des fonctions à l'install et désintall du module Install : /** * Install procedure */ function install () { if ( !parent::install() || !$this->changeAdminTabClass('AdminCatalog','AdminCatalog') ) return false; return true; } Désinstall : /** * Uninstall Procedure */ function uninstall () { if ( !parent::uninstall() OR !$this->resetAdminTabClass('AdminCatalog','AdminCatalog') ) return false; return true; } 4. Astuces - Les 2 fonctions citées peuvent servir plusieurs fois, et il est tout à fait possible (voire mieux) de les insérer directement dans un override de la classe Module (via le répertoire Override cette fois-ci) - La gestion des trads peut poser pb parfois avec ce genre de procédé (et notamment dans le cas précis d'AdminCatalog ou AdminProducts). Je vous propose donc aussi la fonction l() telle que je l'ai ré-écrite, à insérer dans les override des AdminTabs Core. /** * * Override - use translations files to replace english expression. * * @param mixed $string term or expression in english * @param string $class * @param boolan $addslashes if set to true, the return value will pass through addslashes(). Otherwise, stripslashes(). * @param boolean $htmlentities if set to true(default), the return value will pass through htmlentities($string, ENT_QUOTES, 'utf-8') * @return string the translation if available, or the english default text. */ protected function l($string, $class = 'AdminTab', $addslashes = FALSE, $htmlentities = TRUE) { global $_LANGADM, $_MODULE; //set MD5 key $md5Key = md5(str_replace('\'', '\\\'', $string)); //set module key $moduleKey = ''; //Manage Module translations $currentClass = get_class($this); if (Module::getModuleNameFromClass($currentClass)) { $currentKey = '<{'.strtolower(Module::$classInModule[$currentClass]).'}'.strtolower(_THEME_NAME_).'>'.strtolower($currentClass).'_'.$md5Key; $defaultKey = '<{'.strtolower(Module::$classInModule[$currentClass]).'}prestashop>'.strtolower($currentClass).'_'.$md5Key; } //Tries to find translation within default admin translation or module translations if (key_exists('AdminProducts'.$md5Key, $_LANGADM)) $str = $_LANGADM['AdminProducts'.$md5Key]; elseif (key_exists('AdminCatalog'.$md5Key, $_LANGADM)) $str = $_LANGADM['AdminCatalog'.$md5Key]; elseif (key_exists($defaultKey, $_MODULE)) $str = $_MODULE[$defaultKey]; elseif (key_exists($currentKey, $_MODULE)) $str = $_MODULE[$currentKey]; else $str = $string; $str = $htmlentities ? htmlentities($str, ENT_QUOTES, 'utf-8') : $str; return str_replace('"', '"', ($addslashes ? addslashes($str) : stripslashes($str))); }
  13. Par sécurité et éventuellement pour des raisons légales, Il n’est pas possible d’effacer des commandes dans l’administration de Prestashop. Il est possible de contourner cette limitation mais attention à manipuler avec précaution. PrestaTIPS - BYE BYE JOHN DOE - PRESTASHOP.pdf PrestaTIPS - BYE BYE JOHN DOE - PRESTASHOP.pdf
×
×
  • Create New...