Prestashop PHP Включить в .tpl не работает - PullRequest
4 голосов
/ 01 сентября 2011

Я создаю витрину для клиента с помощью Prestashop. Prestashop использует файлы Smarty .TPL. Я прочитал smarty документацию и просмотрел сеть, но все предложения не работают.

Сначала я создал сайт, используя обычные страницы .php, и я включаю header.php на каждую страницу.

Затем я создал каталог для prestashop и настроил его. Я отредактировал файл header.tpl и смог жестко закодировать в коде header.php. Проблема с этим есть; Когда я захочу отредактировать заголовок (панель навигации, изображения, социальные сети), мне придется редактировать его в двух разных местах. Поэтому я попытался «включить» мой файл header.php.

Хотя, когда я пытаюсь использовать smarty {include_PHP "file.php"} и / или {PHP} include ... {PHP}, Prestashop выдает ошибки и выдает мне пустую белую страницу - никаких ошибок не выдается - (в chrome выдает "ошибку сервера"), пока я не уберу включения.

Я попытался заменить весь код header.tpl умным включением и другим фрагментом кода, который имел хук заголовка, но ни один из них не работал. Какие-либо предложения? Я просто хочу один заголовок, где мне нужно всего лишь один раз отредактировать его, чтобы внести изменения.

Использование Prestashop v 1.4.4.0

Редактировать: я изменил allow_php на true с false. Теперь он пытается добавить файл, хотя и говорит, что не может найти файл. Я поместил его рядом с header.tpl и просто использовал:

{php}
            include('navBar.php'); 
       {/php} 

Ответы [ 2 ]

4 голосов
/ 02 сентября 2011

ОТВЕТИЛ!

Когда вы используете файлы Smarty .TPL, когда вы что-то включаете, вы не включаете путь к файлу, над которым работаете.Вы включаете, откуда индекс.

Пример:

Я работаю над header.tpl, он находится в: siteroot / smartyinstall / themes / themename / header.tpl

Когда include ищет файл, он на самом деле ищет его в корневой папке smarty, потому что header.tpl помещается на страницу index.html, котораянаходится в папке smartyinstall .

Итак, вам нужно идти оттуда.В моем случае заголовок, который я пытался включить, находился в: siteroot / includes / navBar.php

, поэтому мне пришлось написать include ('../ includes / navBar.php') ;, толькоподнимаясь вверх по одному каталогу вместо четырех.

Надеюсь, это поможет всем, у кого есть такая проблема!

0 голосов
/ 03 сентября 2011

Включать php в файлы smarty .tpl считается очень плохой практикой, поэтому я настоятельно рекомендую не добавлять код таким способом. Одна из основных причин отключения тега {php} состоит в предотвращении атак с использованием кода. Сайты электронной коммерции по своей природе являются естественными объектами для эксплойтов.

Лучшим подходом было бы переопределить класс FrontController для назначения вашего пользовательского кода переменной smarty - его можно было бы затем вставить в header.tpl, не прибегая к использованию php include().

С помощью переопределений классов и контроллеров, доступных в Prestashop 1.4.x, нет никакой реальной причины, по которой вам нужно прибегать к взломам и / или модификациям основного дистрибутива.

Пол

...