Gery59 Posted January 8, 2014 Share Posted January 8, 2014 Bonjour à tous, j'ai un problème concernant l'override du fichier AdminCMSController. Je cherche à ajouter un champs pour les pages CMS, un champs titre tout simplement, car dans prestashop, seul un champs meta_title est proposé. Dans mes fichiers, le but est donc d'ajouter le champs "link_title". Pour se faire, j'ai ajouté le fichier override/Classes/CMS.php comme suit : class CMS extends CMSCore { /** @var string Name */ public $meta_title; public $meta_description; public $meta_keywords; public $content; public $link_rewrite; public $id_cms_category; public $position; public $active; public $link_title; /** * @see ObjectModel::$definition */ public static $definition = array( 'table' => 'cms', 'primary' => 'id_cms', 'multilang' => true, 'fields' => array( 'id_cms_category' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'), 'position' => array('type' => self::TYPE_INT), 'active' => array('type' => self::TYPE_BOOL), // Lang fields 'meta_description' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255), 'meta_keywords' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255), 'meta_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 128), 'link_title' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 255), 'link_rewrite' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isLinkRewrite', 'required' => true, 'size' => 128), 'content' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isString', 'size' => 3999999999999), ), ); } Puis j'ai créé le champs dans la table ps_cms_lang (un varchar de 255 caractères) Enfin j'ai voulu overrider le fichier AdminCMSController.php. J'ai donc créer le fichier dans le répertoire override/controllers/admin/AdminCMSController.php Voici le contenu de mon fichier : class AdminCmsController extends AdminCmsControllerCore { protected $category; public $id_cms_category; protected $position_identifier = 'id_cms'; public function __construct() { $this->table = 'cms'; $this->className = 'CMS'; $this->lang = true; $this->addRowAction('edit'); $this->addRowAction('delete'); $this->bulk_actions = array('delete' => array('text' => $this->l('Delete selected'), 'confirm' => $this->l('Delete selected items?'))); $this->fields_list = array( 'id_cms' => array('title' => $this->l('ID'), 'align' => 'center', 'width' => 25), 'link_rewrite' => array('title' => $this->l('URL'), 'width' => 'auto'), 'link_title' => array('title' => $this->l('Titre lien'), 'width' => 'auto'), 'meta_title' => array('title' => $this->l('Title'), 'width' => '300', 'filter_key' => 'b!meta_title'), 'position' => array('title' => $this->l('Position'), 'width' => 40,'filter_key' => 'position', 'align' => 'center', 'position' => 'position'), 'active' => array('title' => $this->l('Displayed'), 'width' => 25, 'align' => 'center', 'active' => 'status', 'type' => 'bool', 'orderby' => false) ); // The controller can't be call directly // In this case, AdminCmsContentController::getCurrentCMSCategory() is null if (!AdminCmsContentController::getCurrentCMSCategory()) { $this->redirect_after = '?controller=AdminCmsContent&token='.Tools::getAdminTokenLite('AdminCmsContent'); $this->redirect(); } $this->_category = AdminCmsContentController::getCurrentCMSCategory(); $this->_join = ' LEFT JOIN `'._DB_PREFIX_.'cms_category` c ON (c.`id_cms_category` = a.`id_cms_category`)'; $this->_select = 'a.position '; $this->_filter = 'AND c.id_cms_category = '.(int)$this->_category->id; parent::__construct(); } public function renderForm() { if (!$this->loadObject(true)) return; if (Validate::isLoadedObject($this->object)) $this->display = 'edit'; else $this->display = 'add'; $this->toolbar_btn['save-and-preview'] = array( 'href' => '#', 'desc' => $this->l('Save and preview') ); $this->toolbar_btn['save-and-stay'] = array( 'short' => 'SaveAndStay', 'href' => '#', 'desc' => $this->l('Save and stay'), ); $this->initToolbar(); $categories = CMSCategory::getCategories($this->context->language->id, false); $html_categories = CMSCategory::recurseCMSCategory($categories, $categories[0][1], 1, $this->getFieldValue($this->object, 'id_cms_category'), 1); $this->fields_form = array( 'tinymce' => true, 'legend' => array( 'title' => $this->l('CMS Page'), 'image' => '../img/admin/tab-categories.gif' ), 'input' => array( // custom template array( 'type' => 'select_category', 'label' => $this->l('CMS Category'), 'name' => 'id_cms_category', 'options' => array( 'html' => $html_categories, ), ), array( 'type' => 'text', 'label' => $this->l('Titre lien:'), 'name' => 'link_title', 'lang' => true, 'required' => true, 'hint' => $this->l('Invalid characters:').' <>;=#{}', 'size' => 255 ), array( 'type' => 'text', 'label' => $this->l('Meta title:'), 'name' => 'meta_title', 'id' => 'name', // for copy2friendlyUrl compatibility 'lang' => true, 'required' => true, 'class' => 'copy2friendlyUrl', 'hint' => $this->l('Invalid characters:').' <>;=#{}', 'size' => 50 ), array( 'type' => 'text', 'label' => $this->l('Meta description'), 'name' => 'meta_description', 'lang' => true, 'hint' => $this->l('Invalid characters:').' <>;=#{}', 'size' => 70 ), array( 'type' => 'tags', 'label' => $this->l('Meta keywords'), 'name' => 'meta_keywords', 'lang' => true, 'hint' => $this->l('Invalid characters:').' <>;=#{}', 'size' => 70, 'desc' => $this->l('To add "tags" click in the field, write something, and then press "Enter."') ), array( 'type' => 'text', 'label' => $this->l('Friendly URL'), 'name' => 'link_rewrite', 'required' => true, 'lang' => true, 'hint' => $this->l('Only letters and the minus (-) character are allowed') ), array( 'type' => 'textarea', 'label' => $this->l('Page content'), 'name' => 'content', 'autoload_rte' => true, 'lang' => true, 'rows' => 5, 'cols' => 40, 'hint' => $this->l('Invalid characters:').' <>;=#{}' ), array( 'type' => 'radio', 'label' => $this->l('Displayed:'), 'name' => 'active', 'required' => false, 'class' => 't', 'is_bool' => true, 'values' => array( array( 'id' => 'active_on', 'value' => 1, 'label' => $this->l('Enabled') ), array( 'id' => 'active_off', 'value' => 0, 'label' => $this->l('Disabled') ) ), ), ), 'submit' => array( 'title' => $this->l('Save'), 'class' => 'button' ) ); if (Shop::isFeatureActive()) { $this->fields_form['input'][] = array( 'type' => 'shop', 'label' => $this->l('Shop association:'), 'name' => 'checkBoxShopAsso', ); } $this->tpl_form_vars = array( 'active' => $this->object->active, 'PS_ALLOW_ACCENTED_CHARS_URL', (int)Configuration::get('PS_ALLOW_ACCENTED_CHARS_URL') ); return AdminCmsController::renderForm(); } } Mais cela ne fonctionne pas. J'ai fait le test de modifier le fichier source controllers/admin/AdminCMSController.php en ajoutant la déclaration suivante et cela fonctionne : array( 'type' => 'text', 'label' => $this->l('Titre lien:'), 'name' => 'link_title', 'lang' => true, 'required' => true, 'hint' => $this->l('Invalid characters:').' <>;=#{}', 'size' => 50 ), Donc la modification fonctionne hormis le fait que le fichier n'est pas overrider. Pouvez-vous m'aider pour savoir ce qui ne va pas dans mes modifications? Le but principal étant que l'override fonctionne, et que les fichiers source de prestashop ne soient pas modifiés. Je vous précise que j'ai passé un bon moment sur google et le forum de prestashop sans trouver de solution. Je suis sous prestashop 1.5.4.1. Merci d'avance pour vos réponses. Link to comment Share on other sites More sharing options...
seb776 Posted January 8, 2014 Share Posted January 8, 2014 Bonjour, As tu supprimé le fichier /cache/class_index.php ? Link to comment Share on other sites More sharing options...
Gery59 Posted January 8, 2014 Author Share Posted January 8, 2014 Merci seb776, je ne savais pas qu'il fallait supprimer ce fichier du cache. Je l'ai fait et j'ai bien vu que la ligne 'AdminCmsController' => 'override/controllers/admin/AdminCmsController.php', est maintenant remplie. Par contre lorsque je vais que je clique sur créer ou modifier une page CMS, le navigateur me dit "Echec du chargement". Sur la page de gestion des CMS, j'ai les menus "modifier" et "supprimer" qui sont apparus en double. Le fichier réécrit ne doit pas être correct. Des idées de la provenance de ce genre de problème? Link to comment Share on other sites More sharing options...
seb776 Posted January 10, 2014 Share Posted January 10, 2014 comme ça, pas d'idée. Pense aussi a mettre ton prestashop en mode de developpement : config/defines.inc.php : define('_PS_MODE_DEV_', true); tu auras peut-être plus d'infos ... Link to comment Share on other sites More sharing options...
Gery59 Posted February 4, 2014 Author Share Posted February 4, 2014 J'avais laissé ce script de côté, mais j'ai trouvé mon erreur. Dans le fichier "AdminCMSController.php", il fallait à la fin faire directement appel à return AdminController::renderForm(); Maintenant ça fonctionne comme je le souhaite, les fichiers sont overridés, et on peut ajouter un titre à une page cms. Merci Seb776 1 Link to comment Share on other sites More sharing options...
J.G. Posted September 5, 2022 Share Posted September 5, 2022 Merci d'avoir répondu à ton propre problème. J'ai eu exactement le même soucis, et il est maintenant résolu. 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