11
votes

Créer une page personnalisée dans PrestaShop 1.5.3

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.

Jusqu'à présent j'ai Création d'un fichier test.php dans le répertoire racine des magasins avec contenu suivant: xxx

J'ai placé le test correspondant.tpl dans mon bord de base des thèmes. Il contient simplement «bonjour monde».

J'ai changé le blockmenu.php et créé un lien personnalisé vers ma page: xxx

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 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?

y a-t-il d'autre moyen de créer une page personnalisée fonctionnelle sans CMS?


4 Réponses :


29
votes

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');
}

}


8 commentaires

N'oubliez pas de définir l'attribut de classe Public $ php_self = 'mypage'; 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 . 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 / . 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



8
votes

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;
    }

}


0 commentaires

2
votes
  1. Créez un contrôleur de page personnalisé dans le répertoire de remplacement - Remplacement / Contrôleurs / Avant / CustomPagecontroller.php

    xxx

    1. Un modèle pour notre nouvelle page personnalisée - Thèmes / Site-Current-Courant-Thème / Personnalisé-Page.Tpl XXX

      Création de la première page personnalisée à Prestashop < / a>


2 commentaires

Pourquoi je vois toujours une page vierge au lieu de ma vue?


Veuillez activer le mode d'erreur en édition /config/defines.inc.php