Перейти к содержимому


- - - - -

Вызов PHP модуля из PHP фрагмента


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 9

#1 MaximL

MaximL

    Активный участник

  • Пользователи
  • PipPipPip
  • 31 сообщений

Отправлено 23.06.2009, 17:42

Запускаю PHP модуль в Zebrum, типа:

##Название
@@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 support

support

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 1 140 сообщений

Отправлено 24.06.2009, 03:16

Просмотр сообщенияMaximL (23.6.2009, 21:42) писал:

Запускаю PHP модуль в Zebrum, типа:
Т.е. создаете страницу со ссылкой на какую-то страницу вне Zebrum Lite?

Просмотр сообщенияMaximL (23.6.2009, 21:42) писал:

И как мне лучше выбраться из такой ситуации ?
Попробуйте обернуть внешний PHP-код в модуль Zebrum Lite, тогда результат работы внешнего скрипта можно обернуть в шаблон Zebrum Lite. Как пример, http://zebrum.ru/for...c...dpost&p=965

#3 MaximL

MaximL

    Активный участник

  • Пользователи
  • PipPipPip
  • 31 сообщений

Отправлено 24.06.2009, 07:58

Для того чтобы лучше "вьехать" в эту особенность применения PHP вместе с Zebrum я просто воспроизвел все, что Вы рекомендовали в топике по указанному вами
адресу. Тем более, что рабочая форма обратной связи на моих сайтах под 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 support

support

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 1 140 сообщений

Отправлено 24.06.2009, 08:38

Просмотр сообщенияMaximL (24.6.2009, 11:58) писал:

Для того чтобы лучше "вьехать" в эту особенность применения PHP вместе с Zebrum я просто воспроизвел все, что Вы рекомендовали в топике по указанному вами
адресу. Тем более, что рабочая форма обратной связи на моих сайтах под 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
Вполне понятная ошибка - отсутствует файл contacts.php в папке с feedback.php

Просмотр сообщенияMaximL (24.6.2009, 11:58) писал:

PS: Я пробовал еще вариант с заменой при вызове в меню (и соответственно в feedback.php) файла contents.php на start.php. Однако проблема сохранилась прежней.
Посмотрите внимательно на код класса zmodule_feedback, предполагается, что файл contacts.php (start.php при замене) находится в той же папке, где и feedback.php. Если это не так, то нужно подправить строчку
require_once(dirname(__FILE__) . '/start.php');


#5 MaximL

MaximL

    Активный участник

  • Пользователи
  • PipPipPip
  • 31 сообщений

Отправлено 24.06.2009, 09:53

Просмотр сообщенияsupport (24.6.2009, 12:38) писал:

Вполне понятная ошибка - отсутствует файл contacts.php в папке с feedback.php


Посмотрите внимательно на код класса 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 support

support

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 1 140 сообщений

Отправлено 24.06.2009, 16:44

Просмотр сообщенияMaximL (24.6.2009, 13:53) писал:

Все так и было сделано: все файлы для формы (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;
    ?>
Убедительная просьба перечитать темы, т.к. Вы двигаетесь в другом направлении. Если Вы хотите подключить файл "start.php" из тела страницы, то прописывайте путь к файлу относительно ZENGINE_HOMEDIR (корень сайта). Вариант, предложенный мной - написание модуля, который включает в себя вызов файла start.php и доступ к нему по ссылке /module/ (в случае с feedback - /feedback/).

#7 MaximL

MaximL

    Активный участник

  • Пользователи
  • PipPipPip
  • 31 сообщений

Отправлено 26.06.2009, 10:41

Просмотр сообщенияsupport (24.6.2009, 20:44) писал:

Убедительная просьба перечитать темы, т.к. Вы двигаетесь в другом направлении. Если Вы хотите подключить файл "start.php" из тела страницы, то прописывайте путь к файлу относительно ZENGINE_HOMEDIR (корень сайта). Вариант, предложенный мной - написание модуля, который включает в себя вызов файла start.php и доступ к нему по ссылке /module/ (в случае с feedback - /feedback/).

  Меня конечно интересует второй вариант поскольку он позволяет "обернуть" (как Вы выразились) внешний 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 support

support

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 1 140 сообщений

Отправлено 26.06.2009, 13:00

Просмотр сообщенияMaximL (26.6.2009, 14:41) писал:

Меня конечно интересует второй вариант поскольку он позволяет "обернуть" (как Вы выразились) внешний 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 в корне сайта. Но тогда каким образом
  следует обращаться к этому модулю ?
Страницы сайта и модуль сейчас никак не связаны. Моя ошибка, забыл об изменениях в движке с того времени. Для того, чтобы модуль заработал в версии Zebrum Lite 1.1.4, необходимо прописать правило в файле zengine/rewrite_rules.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 hvoran

hvoran

    Новичок

  • Пользователи Zebrum CMS
  • Pip
  • 6 сообщений

Отправлено 28.06.2009, 02:33

добрый день!
попробовал сделать как вы пишите, и ничего не получилось

но у меня вопрос в другом,

можно ли через модули подключить динамический контент, который формируется из базы данных
и если да, то подскажите "правильное" направление

в "лоб" задача не решилась

#10 hvoran

hvoran

    Новичок

  • Пользователи Zebrum CMS
  • Pip
  • 6 сообщений

Отправлено 02.07.2009, 04:46

Просмотр сообщенияhvoran (28.6.2009, 6:33) писал:

добрый день!
попробовал сделать как вы пишите, и ничего не получилось

но у меня вопрос в другом,

можно ли через модули подключить динамический контент, который формируется из базы данных
и если да, то подскажите "правильное" направление

в "лоб" задача не решилась


спасибо за ответ :)
решил задачку по другому
написал скрипт, чтобы из базы формировались страницки в формате Зебрум
за систему спасибо
рассматриваю приобретение старшей версии :)




Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей