Вопрос о дизайне веб-приложения Catalyst, связанный с реализацией шаблона

Я только начинаю работать с Catalyst и все еще пытаюсь осмыслить его, так что, пожалуйста, потерпите меня.

Мне нужно создать таблицу (HTML) того, что составляет ссылки на определенные записи базы данных. Записи охватывают множество таблиц базы данных. Эта таблица (HTML) должна вести себя как меню в уже определенном шаблоне оболочки. Щелчок по элементу этой «таблицы меню» должен загрузить страницу с «таблицей меню», а также выбранным содержимым записи под ней (либо для просмотра, либо в виде формы для редактирования).

Моя мысль состоит в том, чтобы использовать связанные действия / методы для создания контента (достаточно прямолинейно). Затем используйте единый шаблон (набор инструментов шаблона), чтобы определить, отображаем ли мы только «таблицу меню» или «таблицу меню» и представление выбранной записи, или «таблицу меню» и форму для редактирования выбранной записи. Так, например, шаблон всегда будет создавать «таблицу меню», но в зависимости от того, используется ли он действием / методом FormFu, он может создавать или не создавать форму для редактирования выбранной записи. Таким образом, шаблон будет иметь условный код для отображения или редактирования записей.

Такое ощущение, что требуется шаблон в рамках решения типа шаблона. Может ли кто-нибудь с опытом работы с Catalyst пролить свет на это? Может быть, прокомментируйте, иду ли я в правильном направлении?

Заранее спасибо.


person s2cuts    schedule 24.03.2011    source источник
comment
Шаблон в шаблоне ... Я слышу звонок js. Внедрите json api, который дает вам то, что вам нужно, и загрузите его через запрос ajax (или более ajaj).   -  person matthias krull    schedule 24.03.2011


Ответы (2)


Если вы знаете состояние объектов при вызове сервера (а не на стороне клиента), тогда вы сможете решить эту проблему, используя стандартные инструкции IF и BLOCK, доступные в наборе инструментов шаблона. BLOCK предоставит вам шаблон в шаблоне (с переменными), также доступен IF-ELSE-END. См. Документацию здесь:

http://template-toolkit.org/docs/manual/Directives.html

Однако, если вы знаете только клиентскую сторону, то Mugen в комментариях верен, если бы я кодировал что-то подобное на короткой временной шкале, я бы написал страницу ajax, тогда я бы использовал клон jQuery против шаблона div, чтобы заполнить data и построить меню относительно быстро, конечно, после вызова ajax:

http://api.jquery.com/clone/

http://api.jquery.com/jQuery.ajax/

Но я не могу быть уверен в данных спецификациях и без кода, на который можно было бы взглянуть.

person Horus    schedule 06.04.2011
comment
Да, спасибо, Хорус. Я тестировал использование директивы PROCESS для загрузки отдельного файла шаблона. Это, безусловно, улучшит то, что я делал, за счет большей модульности моего кода. Я еще не написал ни одного функционального JS (просмотрел несколько книг). Из всего, что я прочитал, я думаю, что хотел бы как можно скорее перейти к jquery. Есть ли у вас какие-либо рекомендации по лучшему пути, учитывая мой уровень новичка? - person s2cuts; 08.04.2011
comment
Нет. JQuery - отличный способ изучить javascript (хотя некоторые не согласятся). Человек, который написал jQuery (редактировать: изначально был написан javascript), написал несколько высококачественных книг. Сделайте несколько руководств по Catalyst и напишите пару простых приложений. Просто учись на практике. Вы уже на правильном пути. - person Horus; 08.04.2011

Как прокомментировал Хорус, лучший ответ на этот вопрос немного зависит от того, знает ли сторона сервера состояние (просмотр или редактирование) рассматриваемого объекта.

Не забывайте, что TT предлагает вам возможность INCLUDE или PROCESS другой шаблон в существующем. Итак, если серверная сторона (и, следовательно, TT) знает состояние объекта, что-то вроде этого должно быть довольно простым:

WRAPPER "wrapper.tt";
PROCESS "menu.tt" IF is_menu;
SET tmpl = is_edit ? "edit" : "view";
PROCESS "$tmpl.tt";

С таким подходом вы можете сохранить довольно СУХИЕ вещи.

person RET    schedule 07.04.2011
comment
Похоже, это сок, который я искал. Мне все еще нужно протестировать его и полностью осмыслить, но я думаю, это не против, что шаблон, в котором находятся эти директивы, сами находятся в другом шаблоне WRAPPER? - person s2cuts; 08.04.2011
comment
Вы можете установить шаблон оболочки в своем представлении и никогда не думать об этом. - person Horus; 08.04.2011
comment
Нет абсолютно никаких причин, по которым эта логика не может быть в самом WRAPPER. Логика меню вполне логична. Мне кажется, что решение о том, является ли основная часть страницы шаблоном редактирования или просмотра, должно быть серверным, но вы знаете свое приложение лучше, чем я. - person RET; 09.04.2011