Вызов PHP модуля из PHP фрагмента
#1
Отправлено 23.06.2009, 17:42
##Название
@@filter=php, text2html
@@cache=off
@@file=filename
@@menu=Позиция меню
@@h1=Заголовок странички
<?php
......
echo "<a href=\"~/папка1/модуль1.php\">Раздел1</a>";
. .....
?>
Для него все работает нормально - и позиция меню создается и модуль вызывается
в рамках действующего шаблона.
Но в этом модуле есть ссылка на некий другой PHP модуль: ~/папка1/модуль1.php.
И вот при ее использовании вызванный модуль (модуль1.php) напрочь отметает
действующий шаблон.
И как мне лучше выбраться из такой ситуации ?
#2
Отправлено 24.06.2009, 03:16
MaximL (23.6.2009, 21:42) писал:
MaximL (23.6.2009, 21:42) писал:
#3
Отправлено 24.06.2009, 07:58
адресу. Тем более, что рабочая форма обратной связи на моих сайтах под Zebrum пока отсутствует. Но в ответ получил:
Warning: include_once(contacts.php) [function.include-once]: failed to open stream: No such file or directory in /мой сайт/public_html/zengine/classes/zfilter/php.php(46) : eval()'d code on line 2
Warning: include_once() [function.include]: Failed opening 'contacts.php' for inclusion (include_path='.:/usr/local/php5/lib/php') in /home/maximl/domains/qi-kung.ru/public_html/zengine/classes/zfilter/php.php(46) : eval()'d code on line 2
Правда радует, что с шаблоном сайта теперь полная гармония.
Может на версии 1.1.2 надо делать несколько иначе (тот топик от 17.10.2008 и соответственно версия Zebrum была другая. Например в моей версии уже не пришлось
изменять последнюю строку файла index.php, поскольку она уже была как надо) ?
PS: Я пробовал еще вариант с заменой при вызове в меню (и соответственно в feedback.php) файла contents.php на start.php. Однако проблема сохранилась прежней.
#4
Отправлено 24.06.2009, 08:38
MaximL (24.6.2009, 11:58) писал:
адресу. Тем более, что рабочая форма обратной связи на моих сайтах под Zebrum пока отсутствует. Но в ответ получил:
Warning: include_once(contacts.php) [function.include-once]: failed to open stream: No such file or directory in /мой сайт/public_html/zengine/classes/zfilter/php.php(46) : eval()'d code on line 2
Warning: include_once() [function.include]: Failed opening 'contacts.php' for inclusion (include_path='.:/usr/local/php5/lib/php') in /home/maximl/domains/qi-kung.ru/public_html/zengine/classes/zfilter/php.php(46) : eval()'d code on line 2
MaximL (24.6.2009, 11:58) писал:
require_once(dirname(__FILE__) . '/start.php');
#5
Отправлено 24.06.2009, 09:53
support (24.6.2009, 12:38) писал:
Посмотрите внимательно на код класса zmodule_feedback, предполагается, что файл contacts.php (start.php при замене) находится в той же папке, где и feedback.php. Если это не так, то нужно подправить строчку
require_once(dirname(__FILE__) . '/start.php');
Все так и было сделано: все файлы для формы (start.php, contacts.php и contacts.ini) вместе с файлом feedback.php лежат вместе в папке:
templates/default/modules/feedback/. При этом для вызова использую конструкцию:
@@title=Связь с администратором
@@filter=php, text2html
@@cache=off
@@menu=Контакты
@@h1=Форма связи с администратором
@@sort=50
@@charset=windows-1251
@@type=page
<?php
include_once("start.php"); // Эту строку пробовал и в варианте: include_once("feedback/start.php"); - но никаких изменений это не дало.
echo $content;
?>
#6
Отправлено 24.06.2009, 16:44
MaximL (24.6.2009, 13:53) писал:
templates/default/modules/feedback/. При этом для вызова использую конструкцию:
@@title=Связь с администратором
@@filter=php, text2html
@@cache=off
@@menu=Контакты
@@h1=Форма связи с администратором
@@sort=50
@@charset=windows-1251
@@type=page
<?php
include_once("start.php"); // Эту строку пробовал и в варианте: include_once("feedback/start.php"); - но никаких изменений это не дало.
echo $content;
?>
#7
Отправлено 26.06.2009, 10:41
support (24.6.2009, 20:44) писал:
Меня конечно интересует второй вариант поскольку он позволяет "обернуть" (как Вы выразились) внешний PHP-код в модуль Zebrum Lite. Поскольку это обеспечит
дружбу с шаблоном. Как я понимаю это оборачивание заключается в создании в папке шаблона папок: modules/feedback/ далее создание файла feedback.php с
описанием класса и далее загрузке в эту-же папку собственно внешних PHP скриптов в виде файлов: start.php, contacts.php и contacts.ini. Но непонятка
видимо в том как обратиться к этой форме в рамках Zebrum ? Вариант про который я писал ранее:
@@type=page
<?php
include_once("start.php"); // Пробовал и в варианте: include_once("feedback/start.php");
echo $content;
?>
дает только сообщение типа: No such file or directory, поскольку видимо ищет start.php в корне сайта. Но тогда каким образом
следует обращаться к этому модулю ?
#8
Отправлено 26.06.2009, 13:00
MaximL (26.6.2009, 14:41) писал:
дружбу с шаблоном. Как я понимаю это оборачивание заключается в создании в папке шаблона папок: modules/feedback/ далее создание файла feedback.php с
описанием класса и далее загрузке в эту-же папку собственно внешних PHP скриптов в виде файлов: start.php, contacts.php и contacts.ini. Но непонятка
видимо в том как обратиться к этой форме в рамках Zebrum ? Вариант про который я писал ранее:
@@type=page
<?php
include_once("start.php"); // Пробовал и в варианте: include_once("feedback/start.php");
echo $content;
?>
дает только сообщение типа: No such file or directory, поскольку видимо ищет start.php в корне сайта. Но тогда каким образом
следует обращаться к этому модулю ?
Так, например, если для модуля feedback этот код будет выглядить примерно так:
$router->addRoute('feedback', new zroute(array( 'pagepath' => '/feedback', 'module' => 'feedback', 'params' => array( 'title' => 'Обратная связь', ) )));
Этот код добавляет правило внутренней переадресации при запросе страницы /feedback.html на модуль. В свою очередь вызывается метод getPage у модуля feedback (класс zmodule_feedback), который должен вернуть объект страницы (класс zpage). Пример создания страницы в модуле можно посмотреть в файле zengine/modules/ztags/ztags.php .
Сам класс zmodule_feedback должен располагаться в файле templates/.../modules/feedback/feedback.php. Если файл start.php разместить в папке templates/../modules/feedback, то его подключение в модуле можно будет делать через require_once(dirname(__FILE__) . '/start.php');
В правеле переадресации можно задавать параметры для модуля (например, в примере передается параметр title, который может быть использован как заголовок страницы). Получить значение параметра "title" можно используя метод $this->getParam("title"). Если метод getPage возвращает null, то будет переход к следующему правилу переадресации в конечном итоге приведет к 404 ошибке.
Если скопировать папку zengine/modules/ztags в папку templates/.../modules/ztags, то можно изменить поведение модуля, отвечающего за вывод страницы тэгов. Это можно использовать для разбора принципа работы модуля.
Еще один вариант подключения - это указание у страницы отдельного шаблона (например, @@template=feedback приведет к подключению шаблона templates/.../feedback.php). При этом в самом шаблоне можно не выводить содержимое страницы, а заменить его на подключение файла start.php. В отличие от модуля этот вариант позволит создать только одну страницу, в то время как модуль может отдавать разные страницы в зависимости от переданного пути относительно модуля (см. zmodule_ztags).
P.S. Работа модулей будет изменена в следующей версии Zebrum Lite.
#9
Отправлено 28.06.2009, 02:33
попробовал сделать как вы пишите, и ничего не получилось
но у меня вопрос в другом,
можно ли через модули подключить динамический контент, который формируется из базы данных
и если да, то подскажите "правильное" направление
в "лоб" задача не решилась
#10
Отправлено 02.07.2009, 04:46
hvoran (28.6.2009, 6:33) писал:
попробовал сделать как вы пишите, и ничего не получилось
но у меня вопрос в другом,
можно ли через модули подключить динамический контент, который формируется из базы данных
и если да, то подскажите "правильное" направление
в "лоб" задача не решилась
спасибо за ответ
решил задачку по другому
написал скрипт, чтобы из базы формировались страницки в формате Зебрум
за систему спасибо
рассматриваю приобретение старшей версии
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 скрытых пользователей