Je voudrais créer une page personnalisée à Prestashop 1.5.3 sans utiliser CMS.
Malheureusement, je ne trouve pas de tutoriels qui fonctionnent avec 1.5.3. P>
Jusqu'à présent j'ai Création d'un fichier test.php dans le répertoire racine des magasins avec contenu suivant: p> J'ai placé le test correspondant.tpl dans mon bord de base des thèmes. Il contient simplement «bonjour monde». P> J'ai changé le blockmenu.php et créé un lien personnalisé vers ma page: p> si je clique sur le lien La page est affichée mais le HTML est une sorte de corruption. L'identifiant du corps de la page est défini sur pagenotfound em> et la colonne de gauche est générée mais n'est pas affichée. Y a-t-il un moyen de définir le nom $ pour ma page personnalisée afin que je puisse vérifier si ma page personnalisée est chargée et Suppressez la génération des colonnes gauche et droite? P> y a-t-il d'autre moyen de créer une page personnalisée fonctionnelle sans CMS? P> P>
4 Réponses :
Créez simplement un contrôleur avec le nom que vous souhaitez pour la page et mettez-le sous / remplacement / contrôleurs / avant /. Le nom du contrôleur doit être nomyouwantfortharpagecontroller.php
Voici une classe de base qui fonctionnera: p>
class MyPageController extends FrontController { /** * Initialize controller * @see FrontController::init() */ public function init() { parent::init(); } /** * Assign template vars related to page content * @see FrontController::initContent() */ public function initContent() { parent::initContent(); $this->setTemplate(_PS_THEME_DIR_.'my-page.tpl'); } }
N'oubliez pas de définir l'attribut de classe Public $ php_self = 'mypage'; code> Pour pouvoir sélectionner la page liée au menu Seo & URLS.
Bonjour et merci pour la réponse, mais comment puis-je accéder à ma page Web, quelle url dois-je utiliser?
@Fabienpapet Vous pouvez accéder à la page avec www.yoursite.com/index.php?controller=nameofyourController code>. Mais le meilleur moyen est d'ajouter une URL dans le panneau de référencement dans le back-office
@Romainberger, hi monsieur, je pense que cette méthode est plus précise que la création de fichiers PHP et TPL directs dans le dossier racine (comme suggéré par OP). Une question s'il vous plaît: Les nouveaux contrôleurs créés ne seront pas perdus après la mise à jour. Merci?
@Romainberger .well, je pense que vous devriez éditer cette réponse à partir de / contrôleurs / avant /
/ remplissages / contrôleurs / avant / code>. Tu es d'accord avec moi??
@whiteletterSandblankpaces Yep, définitivement. Édité ma réponse. Merci pour la suggestion
J'ai essayé cette approche en PS 1.6, mais je ne peux pas accéder à la page via le lien @Romainberger fourni. Comment puis-je faire cela dans cette version?
Tout ce que je devais faire était d'effacer le cache en supprimant le fichier "cache / clas_index.php" comme suggéré ici: Stackoverflow.com/a/ 23764120/1101730
Tout va bien fonctionne, à l'exception de «Public $ php_self = 'mypage» ».
Si vous mettez votre fichier dans le répertoire de remplacement (bonne pratique), l'identifiant" mypage "ne figure pas dans le menu SEO . Mais, si vous mettez votre fichier de contrôleur dans le répertoire principal, il fonctionne. P>
Les classes / méta.php ne changent pas le répertoire de remplacement, seul le répertoire racine (vous pouvez le voir sur la ligne 56 de méta.php) p>
remplacer la classe méta.php avec ce code permet de numériser Prestashop de numériser le répertoire de remplacement et d'ajouter les pages: p>
class Meta extends MetaCore { public static function getPages($exclude_filled = false, $add_page = false) { $selected_pages = parent::getPages($exclude_filled, $add_page); if (!$files = Tools::scandir(_PS_CORE_DIR_.DIRECTORY_SEPARATOR.'override'.DIRECTORY_SEPARATOR.'controllers'.DIRECTORY_SEPARATOR.'front'.DIRECTORY_SEPARATOR, 'php', '', true)) die(Tools::displayError('Cannot scan override directory')); $exlude_pages = array( 'category', 'changecurrency', 'cms', 'footer', 'header', 'pagination', 'product', 'product-sort', 'statistics' ); foreach ($files as $file) { if ($file != 'index.php' && !in_array(strtolower(str_replace('Controller.php', '', $file)), $exlude_pages)) { $class_name = str_replace('.php', '', $file); $reflection = class_exists($class_name) ? new ReflectionClass(str_replace('.php', '', $file)) : false; $properties = $reflection ? $reflection->getDefaultProperties() : array(); if (isset($properties['php_self'])) $selected_pages[$properties['php_self']] = $properties['php_self']; elseif (preg_match('/^[a-z0-9_.-]*\.php$/i', $file)) $selected_pages[strtolower(str_replace('Controller.php', '', $file))] = strtolower(str_replace('Controller.php', '', $file)); elseif (preg_match('/^([a-z0-9_.-]*\/)?[a-z0-9_.-]*\.php$/i', $file)) $selected_pages[strtolower(sprintf(Tools::displayError('%2$s (in %1$s)'), dirname($file), str_replace('Controller.php', '', basename($file))))] = strtolower(str_replace('Controller.php', '', basename($file))); } } return $selected_pages; } }
p> Un modèle pour notre nouvelle page personnalisée - Thèmes / Site-Current-Courant-Thème / Personnalisé-Page.Tpl P>
Création de la première page personnalisée à Prestashop < / a> p> ol>
Pourquoi je vois toujours une page vierge au lieu de ma vue?
Veuillez activer le mode d'erreur en édition /config/defines.inc.php
Bonjour Geys Cette solution fonctionne parfaitement avec remplacement également.
1 / dans le dossier / dans le dossier Créer une page Fabricant-détaillant.php et mettez ce code: p>
p>
Inclure (DIRNAME ( Outils :: displayfileasdeDepecated (); p> Inclure (Dirname ( Fichier Strong>). '/header.php');//public function setMedia(){
//parent::setMedia();
//$this->addCSS(_THEME_CSS_DIR_.'custom-page.css');
//$this->addJS(_THEME_JS_DIR_.'custom-page.js');
//}
Pourquoi, après avoir défini URL personnalisé IND SEO & URL IN 1.6, je suis redirigé vers le lien "laid"? Quand je vais à YourStore.com/rewrity-Link Cela me renvoie dans
blog.gofenice.com/prestashop/...