Ajouter un champ texte supplémentaire dans vos catégories sous Prestashop 1.4

La version 1.4 de Prestashop a la vie dure. Il m’arrive encore très souvent de devoir faire des adaptations sur cette version alors qu’il existe deux versions majeures supplémentaires sorties depuis. Aujourd’hui j’ai dû ajouter une seconde description à afficher en bas des pages de catégories avec comme particularité qu’elle devait accepter le code html (idéal pour le référencement). Voici comment faire.
Continuer la lecture de « Ajouter un champ texte supplémentaire dans vos catégories sous Prestashop 1.4 »

Autocompletion des classes Prestashop sous Netbeans

Aujourd’hui j’ai eu envie de tester l’IDE Netbeans plutôt qu’Eclipse. La principale raison est que l’autocompletion d’Eclipse laisse à désirer je trouve (dans un environnement PHP du moins). J’ai donc installé Netbeans et en effet j’ai trouvé l’autocompletion bien plus réussie, malheureusement il restait un problème au niveau des classes standards de Prestashop comme par exemple « Cart ». Netbeans n’était pas capable de les trouver et ne proposait donc aucune autocompletion.

J’ai trouvé la solution sur le forum de Prestashop ici. Il suffit d’ajouter à la racine de votre projet un fichier que vous nommez comme bon vous semble et dans lequel vous intégrez la liste des « extends » de prestashop.

Ce qui donne:


class Address extends AddressCore {}
class AddressFormat extends AddressFormatCore {}
class AdminTab extends AdminTabCore {}
class Alias extends AliasCore {}
class Attachment extends AttachmentCore {}
class Attribute extends AttributeCore {}
class AttributeGroup extends AttributeGroupCore {}
class Backup extends BackupCore {}
class Blowfish extends BlowfishCore {}
class CMS extends CMSCore {}
class CMSCategory extends CMSCategoryCore {}
class CSV extends CSVCore {}
class Carrier extends CarrierCore {}
class Cart extends CartCore {}
class CartRule extends CartRuleCore {}
class Collection extends CollectionCore {}
class Combination extends CombinationCore {}
class CompareProduct extends CompareProductCore {}
class Configuration extends ConfigurationCore {}
class ConfigurationTest extends ConfigurationTestCore {}
class Connection extends ConnectionCore {}
class ConnectionSource extends ConnectionsSourceCore {}
class Contact extends ContactCore {}
class Category extends CategoryCore {}
class Context extends ContextCore {}
class ControllerFactory extends ControllerFactoryCore {}
class Cookie extends CookieCore {}
class Country extends CountryCore {}
class County extends CountyCore {}
class Currency extends CurrencyCore {}
class Customer extends CustomerCore {}
class CustomerMessage extends CustomerMessageCore {}
class CustomerThread extends CustomerThreadCore {}
class Customization extends CustomizationCore {}
class DateRange extends DateRangeCore {}
class Delivery extends DeliveryCore {}
class Discount extends DiscountCore {}
class Dispatcher extends DispatcherCore {}
class Employee extends EmployeeCore {}
class Feature extends FeatureCore {}
class FeatureValue extends FeatureValueCore {}
class FileUploader extends FileUploaderCore {}
class Gender extends GenderCore {}
class Group extends GroupCore {}
class GroupReduction extends GroupReductionCore {}
class Guest extends Guest {}
class HelpAccess extends HelpAccessCore {}
class Hook extends HookCore {}
class Image extends ImageCore {}
class ImageManager extends ImageManagerCore {}
class ImageType extends ImageTypeCore {}
class Language extends LanguageCore {}
class Link extends LinkCore {}
class LocalizationPack extends LocalizationPackCore {}
class Logger extends LoggerCore {}
class Mail extends MailCore {}
class Manufacturer extends ManufacturerCore {}
class Media extends MediaCore {}
class Message extends MessageCore {}
class Meta extends MetaCore {}
class Notification extends NotificationCore {}
class ObjectModel extends ObjectModelCore {}
class Pack extends PackCore {}
class Page extends PageCore {}
class PaymentCC extends PaymentCCCore {}
class PaymentModule extends PaymentModuleCore {}
class Product extends ProductCore {}
class ProductDownload extends ProductDownloadCore {}
class ProductSale extends ProductSaleCore {}
class ProductSupplier extends ProductSupplierCore {}
class Profile extends ProfileCore {}
class QuickAccess extends QuickAccessCore {}
class Referrer extends ReferrerCore {}
class RequestSql extends RequestSqlCore {}
class Rijndael extends RijndaelCore {}
class Risk extends RiskCore {}
class Scene extends SceneCore {}
class Search extends SearchCore {}
class SearchEngine extends SearchEngineCore {}
class SpecificPrice extends SpecificPriceCore {}
class SpecificPriceRule extends SpecificPriceRuleCore {}
class State extends StateCore {}
class Store extends StoreCore {}
class Supplier extends SupplierCore {}
class Tab extends TabCore {}
class Tag extends TagCore {}
class Theme extends ThemeCore {}
class Tools extends ToolsCore {}
class Translate extends TranslateCore {}
class TranslatedConfiguration extends TranslatedConfigurationCore {}
class Upgrader extends UpgraderCore {}
class Validate extends ValidateCore {}
class Zone extends ZoneCore {}

Désormais Netbeans sait à quelles classes parents les classes standards de Prestashop doivent être reliées.

Edit

Encore mieux Olivier Grosse nous propose un script qui va générer et maintenir à jour le fichier contenant tous les extends valables pour PS 1.4 seulement malheureusement 😉

Edit again

Encore merci à Olivier Grosse qui vient de me fournir le script compatible 1.5 et 1.6, le voici:


/**
 * Générateur de fichiers de compatibilité Eclipse
 *@license GNU/GPL version 3
 *@author Damien VERON (TrogloGeek)
 * @
 *@website prestashop.blog.capillotracteur.fr
 * 
 */

chdir(dirname(__FILE__));

$sources = array('classes', 'controllers', 'controllers/front', 'controllers/admin');

foreach ($sources as $source) {
$eclipse_file = '<?php'.PHP_EOL;
$dirpath = '../'.$source.'/';
$overridepath = $source.'/';
$classes = dir($dirpath);
/*@var$classes Directory */
while ($classfile = $classes->read()) {
if (substr($classfile, strlen($classfile) - 4) == '.php') {
$classcontent = file_get_contents($dirpath.$classfile);
$matches = array();
if (preg_match('/(abstract +)?class ([A-Za-z_]+)Core/', $classcontent, $matches)) {
list(, $isAbstract, $classname) = $matches;
if (!file_exists($overridepath.$classfile)) {
$eclipse_file .= sprintf('%sclass %s extends %sCore {}%s', $isAbstract, $classname, $classname, PHP_EOL);
}
}
}
}
file_put_contents($overridepath.'eclipse.compat.php', $eclipse_file);
}
/*
A mettre dans /overrides/eclipse.php
Donc faut ensuite appeler l'url : http://monsite.tdl/overrides/eclipse.php


Puis faut récupérer en local les fichiers :
/overrides/classes/eclipse.compat.php
/overrides/controllers/front/eclipse.compat.php
/overrides/controllers/back/eclipse.compat.php
*/

Petite remarque il faut désactiver le .htaccess du dossier override pour pouvoir lancer le script.

Utiliser « translate » dans vos classes sous prestashop

Il m’arrive de temps en temps d’avoir à traduire du texte directement dans une de mes classes lorsque je développe un module. C’est par exemple le cas si je veux générer un fichier PDF avec un nom de fichier correctement traduit. Voici donc comment bénéficier de la fonction de traduction dans vos classes, c’est très simple.
Continuer la lecture de « Utiliser « translate » dans vos classes sous prestashop »

Pas de points relais avec le module Mondial Relay Prestashop

Ca fait plusieurs fois que je dois intervenir sur un module mondial relay ou tnt express pour corriger des bugs. Aujourd’hui c’est le module mondial relay qui, du jour au lendemain, n’affiche plus les points relais et autorise donc les livraisons à domicile (alors que dans les réglages seuls les points relais sont autorisés).
Continuer la lecture de « Pas de points relais avec le module Mondial Relay Prestashop »

Modifier une commande prestashop

Dans certain cas la modification d’une commande prestashop est impossible. Cela arrive pour les commandes qui sont considérées comme ayant été livrées.
C’est à dire toutes les commandes dont l’état dans lequel elle se trouve à la mention « Afficher le PDF de bon de livraison » cochée.

Si vous voulez pouvoir modifier ces commandes voici ce qu’il faut remplacer dans le fichier « admin0\themes\default\template\controllers\orders\_product_line.tpl ».

Ligne 101


{if ((!$order->hasBeenDelivered() OR Configuration::get('PS_ORDER_RETURN')) AND (int)($product['product_quantity_return']) < (int)($product['product_quantity']))}

par


{if ((Configuration::get('PS_ORDER_RETURN')) AND (int)($product['product_quantity_return']) < (int)($product['product_quantity']))}

Ligne 110


{elseif (!$order->hasBeenDelivered() OR Configuration::get('PS_ORDER_RETURN'))}

Par


{elseif (Configuration::get('PS_ORDER_RETURN'))}

Ligne 134


{if ($can_edit &amp;amp;&amp;amp; !$order->hasBeenDelivered())}

Par


{if ($can_edit)}

**** EDIT ****
Pensez à lire les commentaire et notamment celui de Sune car selon les versions il y a quelques lignes de code à commentées également.

Corriger l’arbre des catégories sous Prestashop

Il arrive parfois que, dans votre backoffice, vous vous retrouviez avec des catégories impossibles à déplacer. Ce problème survient lorsque la catégorie mère n’a pas été correctement enregistrée dans la base de données.

Voici comment corriger le problème:
1. tout d’abord récupérez et installez le module que vous trouverez dans ce message (Nous nous en servirons à l’étape 7).
2. repérez l’id de la catégorie qui pose problème.
3. repérez l’id de la catégorie mère qui doit accueillir la catégorie qui pose problème.
4. rendez-vous dans votre base de données et repérez la table ps_category.
5. repérez la ligne de la catégorie posant problème grâce à son ID.
6. dans la colonne « id_parent » modifiez la valeur par l’id de la catégorie mère en indiquant l’id que vous avez récupéré à l’étape 3.
7. rendez-vous dans la configuration du module que vous avez installé précédemment.
8. cliquez sur le bouton « rebuild category table ».

Voila désormais vos catégories devraient re-fonctionner.

Merci à Eolia pour m’avoir fait découvrir le module.