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.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *