Вопросы по API и не только

#
Вопросы по API и не только
И снова всем привет.
Накопились вопросы. Имеется раздел "Услуги". Типа узла - Типовая динамическая страница. Но типовую динамическую страницу в узле не определяем, т.к. в XSL нельзя использовать PHP, а в нашем случае это необходимо (используется форма - php присутствует). Так вот, пришлось делать выборку на странице элемента через ИнфоСистему. Вопросы:
1. Как сделать наиболее рационально выборку необходимых полей и свойств элемента? Реально это сделать одним запросом? На данный момент приходится делать так:
$result = $InformationSystem->GetInformationFromPath(15, '', false);
$item_id = $InformationSystem->GetIdInformationItem($result['item'], $result['group'], $InformationSystem_id);
$item = $InformationSystem->GetInformationSystemItem($item_id);

Как минимум 3 запросы получается для того, чтобы получить только поля элемента =) А как получить свойства элемента? И как это сделать наиболее оптимально?

2. Как быть, если иногда бывают ситуации, когда нужно создать типовую динамическую страницу, но в шаблоне обязательно должен быть PHP?
#
Re: Вопросы по API и не только
PHP в шаблоне - это, видимо, тяжелое наследие Smarty осевшее в неокрепших умах.

Почитайте про парадигму MVC и поймите, что в шаблоне не должно быть никакого php!

Если у вас возникает потребность в выполнении php-кода посреди xsl-шаблона то это говорит о том, что вы в корне неверно решаете вашу задачу, потому что нигде в HostCMS такой потребности нет, ни в стандартных формах добавления комментариев или новых объявлений, ни в пользовательских формах, создаваемых с помощью модуля "Формы" в коммерческих редакциях.

Вот расскажите, для чего вам php в xsl, что вы с ним делать собираетесь?
Заказов не беру. Консультирую редко.
#
Re: Вопросы по API и не только
Полностью согласен с Вами.
Ситуация вот какая. Есть форма (созданная не в через одноименный модуль). Форма отправляется аяксом, но также имеется и серверная обработка. Если имеются ошибки в форме и задействована при этом была серверная обработка, то мы показываем заполненные поля формы, чтобы их еще раз не заполнять пользователю. Как это сделать через XSL шаблон?
Про паттерн и идеологию MVC я хорошо знаю - на фремйворке (YII) в основном проекты делаем =)
#
Re: Вопросы по API и не только
kazinaki писал(а):
Если имеются ошибки в форме и задействована при этом была серверная обработка, то мы показываем заполненные поля формы, чтобы их еще раз не заполнять пользователю. Как это сделать через XSL шаблон?
Элементарно - передать эти значения в xml через $external_propertys и вывести их в xsl-шаблоне в параметре value соответствующего тега input

То есть, вот например, форма у вас передает методом post текстовый input с названием username. Тогда в ТДС перед вызовом метода, который у вас строит эту форму вы пишете примерно такой php-код:
if(isset($_POST['username']))
      $external_propertys['username'] = to_str($_POST['username']);


А в xsl, при формировании этого поля используете такую запись:
<input type="text" name="username" value="{/document/username}"/>


Если форма строится в первый раз, и $_POST['username'] еще не существует, то в xml в узле document не будет узла username, а вывод значения несуществующего узла не возвращает нам ничего, и в результате мы получим просто
value=""
Заказов не беру. Консультирую редко.
#
Re: Вопросы по API и не только
P.S. Естественно, что параметр $external_propertys у вас должен передаваться в тот метод, которым вы строите форму (видимо у вас это или ShowInformationSystem() или ShowInformationSystemItem() - подробнее см. api)
Заказов не беру. Консультирую редко.
#
Re: Вопросы по API и не только
Не подойдет такой вариант. У нас обрабокой формы занимается другой скрипт (не шаблон). И в этом скрипте, если етс ошибки в форме, мы делаем редирект на страницу с формой =) Значения, которые уже ввел пользователь, мы сохраняе мв сессии. Скажите, что и сессии можно юзать в xsl?
#
Re: Вопросы по API и не только
kazinaki писал(а):
Скажите, что и сессии можно юзать в xsl?
Представьте себе, да!

if(isset($_SESSION['username']))
      $external_propertys['username'] = to_str($_POST['username']);


И в чем проблема?
Заказов не беру. Консультирую редко.
#
Re: Вопросы по API и не только
Естественно, что к моменту проверки сессия должна быть "поднята" - т.е.
if(session_id() == '')
    @session_start();


kazinaki писал(а):
У нас обрабокой формы занимается другой скрипт (не шаблон)
Тоже, кстати, спорное решение.
Впрочем, после вашей идеи сделать функционал пользователей на базе ИС, вам меня, наверное, уже не удивить спорностью решений...
Заказов не беру. Консультирую редко.
#
Re: Вопросы по API и не только
=) Вы сами упоминаете про MVC и сами же ее нарушаете =) Форма - представление =) В крайнем случае, на уровне хелпера. Но это не контроллер и не модель =) И само собой, что скрипт обработки формы не должен располагаться в том же скрипте, где и сама форма =) Будьте последовательным =) Это я все про MVC говорю. Что касается сессий. Честно говоря, не знал, что можно юзать PHP в XSL. За это спасибо! =) Да, и это неверно в плане MVC, ну а как еще по другому =) Если в Вашу голову придет более правильное решение задачи, буду признателен =)

p.s.: по поводу функционала юзеров. Вполне здоровая идея =) Если для сайта не нужен весь модуль "Пользователи", то зачем дорогую версию покупать =) К тому же, бюджет проекта не позволял этого.
#
Re: Вопросы по API и не только
kazinaki писал(а):
И само собой, что скрипт обработки формы не должен располагаться в том же скрипте, где и сама форма
Форма это лишь представление данных на экране, и рисует его шаблон, которых находится в xsl-файле.
Скрипт обработки формы - это бизнес-логика, и находится он в php-скрипте, который в зависимости от входных данных либо обрабатывает введенные пользователем значения, либо инициирует отображение формы. Так что все как раз последовательно. А что до разделения на файлы - так MVC не в том чтобы разделить все на кучу файликов, а в том, чтобы разделить шаблон и данные, и эта цель в данном случае как раз полностью достигнута.
Заказов не беру. Консультирую редко.
Авторизация