Подключить php в tpl

Как вставить код php в шаблон tpl (в phpbb)?

Доброго времени суток! Помогите, пожалуйста.. Я в php новичок. Через «поиск» подходящей темы не нашел.. Как вставить код php в шаблон tpl внутри phpbb? Пошел таким путем: В файле ./includes/page_header.php создал переменную

я могу видеть в нужном месте форума слово «test«. Нужно чтобы вместо «test» использовалось (показывалось) содержимое страницы, например ./includes/test2.php В php ничего не понимаю. Очень прошу объяснить простым языком или показать примеры.

хотя в таком случае страница test2.php не обработается как php

а вообще в phpbb есть вроде функция (в админке настраивается), где можно включить обработку php в шаблонах, которые заключаются в определенный тег.

Зайдите на phpbbguru.net и там точно найдете ответ.

разработчик YanCMS Lite (http://lite.yancms.com) — легкая система управления сайтом на файловой базе данных! (Обсуждение (/ru/forum/comment/4737444))

Спасибо, Yanzhula! Совет хороший, и он мне пригодится )) Но, что-то не так.. То есть текст с указанной страницы вставляется в шаблон, а вот php-код работать не хочет. Надо еще поколдовать, возможно, я где-то пути не так прописал.. А на phpbbguru обязательно мод поищу! Спасибо.

Вы бы написали что в test2.php. Может обычный инклюд + запись результата в переменную поможет решить вашу проблему

Включите обработку php в админпанели и не забывайте после произведенных изменений в папке cache удалять все файлы, кроме .htaccess (или через админпанель почистите кэш, без разницы). Иначе изменения не вступят в силу.

xpert13, в test2 лежит код, вызывающий на страницу html-коды рекламных сслылок:

// где site.ru - мой домен сайта 
define('CLX_SITE',"mysite.ru");
define('CLX_PAGE',$_SERVER['REQUEST_URI']);
// где XXXXXX - папка, в которой лежит clx2.php
require_once($_SERVER['DOCUMENT_ROOT'].'/XXXXXX/clx2.php');
echo(CLXru_link());
?>

mavpa, у меня phpbb 2.0.x. в нём нет возможностей «включить обработку php» через админпанель. А мода для этой цели я не нашел. Рекомендуете phpbb 3.0.х.

nikspb:
xpert13, в test2 лежит код, вызывающий на страницу html-коды рекламных сслылок:

// где site.ru - мой домен сайта 
define('CLX_SITE',"mysite.ru");
define('CLX_PAGE',$_SERVER['REQUEST_URI']);
// где XXXXXX - папка, в которой лежит clx2.php
require_once($_SERVER['DOCUMENT_ROOT'].'/XXXXXX/clx2.php');
echo(CLXru_link());
?>

mavpa, у меня phpbb 2.0.x. в нём нет возможностей «включить обработку php» через админпанель. А мода для этой цели я не нашел. Рекомендуете phpbb 3.0.х.

Последнюю стороку, где echo(CLXru_link()); — замените на $test2 = CLXru_link();

// где site.ru — мой домен сайта
define(‘CLX_SITE’,»mysite.ru»);
define(‘CLX_PAGE’,$_SERVER[‘REQUEST_URI’]);
// где XXXXXX — папка, в которой лежит clx2.php
require_once($_SERVER[‘DOCUMENT_ROOT’].’/XXXXXX/clx2.php’);
$test2 = CLXru_link();

И весь этот код добавьте, затем и переменную передайте

xpert13, мне бы пример.

ivtrans, нет, не получается. ошибок нет, но результаты php со страницы test2 не отображаются. И не отображается текст, если написать его в той странице.

Сегодня мне дали еще одну идею по запуску php из страницы:

$include_php = `test2.php` 
// или:
$include_php = shell_exec ("php test2.php");

Но в этом случае вообще появляется ошибка: Parse error: syntax error, unexpected T_IF

Читайте также:  Java как пользоваться boolean

Ребята, помогите разобраться новичку. Это код (в test2.php) отображает рекламные ссылки в автоматическом режиме. Без этого кода, приходится размещать html вручную.. Хочу автоматизировать это дело.

Источник

Как сделать,чтобы в .tpl работало php?

Здравствуйте. Помогите разобраться. Есть код на PHP,мне его нужно вставить в определенное место на сайте,но когда вставляю не работает, так как видимо расширение файла куда вставляю .tpl. Как можно сделать,чтобы код там работал?
Пробовал:
1.Нашел файл формата php,в котором подключается tpl,хотел организовать функцией,но так и не понял,что там писать.
2.В файл с расширением .tpl вставить php код между тоже не работает.

Естественно, что он не работает там, потому что в .tpl-файлах не должно быть кода PHP — это шаблоны, которые результат работы PHP-кода получают в виде переменных. Найдите, где вызывается нужный вам шаблон, и передайте ему необходимую строку в качестве переменной.

Semenov-Nikolay

Спасибо! Помогло.Только единственное почему-то теперь ,когда переменной присваиваю строку например $d=»Всегда лучшая стоимость обучения» ,а затем пытаюсь вывести на сайте,выводится только первое слово,а точнее до первого пробела. Можно ли как-то вывести целиком,чтобы не создать на каждое слово по переменной и не использовать конкатенацию?

Приведите, пожалуйста, код шаблона (tpl) и PHP-код, где у вас вызывается шаблон.
И посмотрите в DOM-инспекторе («Инспектировать» в контекстном меню на первом слове) — может в исходном HTML-коде у вас полностью текст, а оставшиеся слова «съедаются» из-за некорректной вёрстки.

verdex

Если у Вас PHP работает как модуль веб-сервера Apache, попробуйте прописать это в .htaccess в папке, где лежит нужный файл с расширением .tpl

AddType application/x-httpd-php .tpl AddHandler x-httpd-php .tpl

Semenov-Nikolay

Николай: Конечно не помогло. Совет не только бесполезный, но и создающий угрозу для безопасности. Из .htaccess эти строки обязательно удалите.

verdex

empr: А почему эти строки создают угрозу для безопасности?
Фактически они разрешают выполнять PHP код в .tpl файлах — то, что нужно ТС
Или я ошибаюсь?

verdex: .tpl-файлы, как правило, принадлежат шаблонизаторам Smarty/Dwoo, которые их читают напрямую из файловой системы и затем компилируют в .php-файлы. При этом включать PHP-код в шаблоны напрямую запрещено (хотя для Smarty был когда-то такой модуль, но его быстро исключили).

Поэтому:
1. ТС не нужно выполнять PHP-код в .tpl файлах, этот вопрос решается иначе.
2. Даже если бы ему это было нужно — .tpl-файлы всё равно не вызываются напрямую через браузер, а используются внутри CMS, поэтому вешать на них обработчик PHP бесполезно.

И к вопросу, почему это опасно — некоторые CMS позволяют редактировать шаблоны в формате .tpl из админки, поэтому если эти файлы будут обрабатываться как PHP-скрипты, то потенциальный взломщик сможет исполнять произвольный код на сервере, лишь получив доступ к админ-панели.

Источник

Использование tpl-файлов

Использование tpl-файлов

Сразу скажу, что я уже писал об этой теме здесь: использование tpl-файлов. Однако, не все поняли данный материал, и я решил к нему вернуться и написать всё немного по-другому. Не секрет, что любой серьёзный движок никогда не будет смешивать в своём коде HTML и PHP. Однако, HTML и PHP коды очень тесно взаимосвязаны, поэтому для того, чтобы не нарушать правила «хорошего тона», были придуманы tpl-файлы. Данные файлы служат для хранения HTML-кода с элементами шаблонов, которые подставляются в PHP-коде. Давайте подробнее разберём использование tpl-файлов с примером.

Читайте также:  Create folder in javascript

Возьмём с Вами самый элементарный пример — это панель пользователя, где есть его аватарка и приветствие по имени. Первым делом, создадим tpl-файл, и пусть он называется userpanel.tpl. Напоминаю, что это всего лишь кусок HTML-кода с элементами шаблона:

Аватарка

Здравствуйте, %name%!

Ничего сложного, это просто обычный HTML-код. Только вместо определённых значений стоят %элементы_шаблона%.

Теперь разберёмся с PHP-обработкой. Здесь всё будет более, чем абстрактно, но, к сожалению, по-другому никак. Главное — это понять принцип работы. И так PHP-код для обработки созданного tpl-файла:

/* Данная функция, хоть и использует буферы, но суть элементарна: вернуть содержимое файла */
function getTemplate($name) ob_start(); // Начинаем сохрание выходных данных в буфер
include ($name.».tpl»); // Отправляем в буфер содержимое файла
$text = ob_get_clean(); // Очищаем буфер и возвращаем содержимое
return $text; // Возвращение текста из файла
>
$name = «Николай»; // Извлекается из базы
$avatar = «avatars/user_15.jpg»; // Извлекается из базы
/* Начинается замена элементов шаблона на реальные данные */
$userpanel = str_replace(
array(
«%name%»,
«%avatar%»
),
array (
$name,
$avatar
),
getTemplate(«userpanel»)
);
echo $userpanel; // Выводим окончательный результат
?>

Это простейший вариант. Всё прокомментировано, поэтому вопросов по этому примеру возникнуть не должно. И по сути любая страница состоит из таких вот блоков. Ваша задача взять нужные блоки (функция getTemplate()), заменить нужными данными (функция str_replace() и данные полученные, например, из базы), а потом просто соединить все блоки, как обычные строки, и вывести всё на страницу.

Безусловно, без ООП здесь очень проблемно будет. Вы такое количество условий наплодите (страниц же много), что быстро запутаетесь. Но принцип использования tpl-файлов, надеюсь, Вы осознали. Дальше уже самостоятельно подумайте, как всё это обернуть в ООП, чтобы всё было максимально простым с точки зрения понимания кода и его сопровождения в будущем.

Создано 03.02.2012 14:22:45

  • Михаил Русаков
  • Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

    Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
    Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

    Если Вы не хотите пропустить новые материалы на сайте,
    то Вы можете подписаться на обновления: Подписаться на обновления

    Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

    Читайте также:  Default var value php

    Порекомендуйте эту статью друзьям:

    Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

    1. Кнопка:
      Она выглядит вот так:
    2. Текстовая ссылка:
      Она выглядит вот так: Как создать свой сайт
    3. BB-код ссылки для форумов (например, можете поставить её в подписи):

    Комментарии ( 23 ):

    А здесь можно было использовать file_get_contents($name.».tpl») вместо getTemplate($name)?

    Да, если Вам так удобнее. Просто я привык к буферам, в своё время с ними много работал, но file_get_contents() вполне подходит. Но я настоятельно рекомендую использовать getTemplate(), просто внутри используйте file_get_contents(). Очень часто бывают всякие повторяющиеся элементы (по типу адреса сайта), которые постоянно заменяются и их можно автоматически всегда при вызове getTemplate() сразу заменять. Это резко сокращает количество кода.

    Я сделал себе обработку через getTemplate, но тогда не получается сделать включение любого модуля (например опроса, формы авторизации, отдельных файлов)без PHP. Как делать include в TPL?

    Это и не нужно делать, всё должно включаться через PHP.

    а к чему именно tpl? я лично использую формат файла php — разницы не вижу

    Принято так. Можете использовать хоть txt, хоть вообще без расширения, результат будет тот же.

    не понятно зачем делать через буфер? у Вас есть похожая статья http://myrusakov.ru/php-use-tpl.html но все без буфера, не могли бы Вы пояснить почему здесь буфер?

    Чтобы не выводить содержимое файла до замены элементов шаблона. Но, как я уже писал выше, это Ваше дело — можете использовать метод из статьи, которую привели.

    Миша, подскажи как мне потсупить? У меня есть файлы в которых выводится из базы только текст, в нём я могу делать так и проблем не будет : $template = str_replace( array( «%text%» ), array ( $index[‘text’].$view ), getTemplate(«open») ); И у меня есть файлы в которых мне приходиться именно в основном контенте делать большие скрипты с циклами и т.д. Как мне быть с такими файлами? Делать отдельные файлы tpl? или как? А можно ли работу всего скрипта занести в одну переменную? Просто тогда мне бы не надо было создавать идентичные друг другу файлы. Подскажи плиззз

    Единственный выход — это создавать новые tpl-файлы, очень похожие на остальные. Это недостаток, но ничего не поделаешь.

    Понятно, а почему если в файле с шаблоном стоит цикл после %text% то выдаёт ошибку?

    В файле с шаблоном не должно быть циклов.

    А как мне тогда выводить те же самые комментарии? Надо делать их блоками?

    Надо блок выделить в отдельный tpl-файл, в PHP сделать цикл, который собирает много этих блоков воедино, а затем всю эту кучу вставляет в основной tpl-файл.

    Пожалуйста напишите статью как всё это организовать по правильному и удобному. Очень прошу, я могу сделать но даю гарантию что код будет ужасный, напишите пожалуйста

    Источник

    Оцените статью