Используя каркас Coldbox, есть ли способ перехватить вызов renderView и выполнить другой шаблон? - PullRequest
0 голосов
/ 06 августа 2011

Я пытаюсь научиться Coldbox, возможно, заменить текущую платформу, которую я использую. Одной из функций, которые я сейчас использую, является возможность переопределения любого из включений шаблона по соглашению.

По сути, допустим, у меня есть представление, "views / home.cfm"

<h1>I am the default theme</h1>

и это все хорошо. Но допустим, что у меня другое представление: "themes / [theme-name] /views/home.cfm"

<h1>I am the user chosen theme</h1>

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

Есть ли способ сделать это, переопределяя системные функции?

Я посмотрел на перехватчики, и перехватчики preViewRender и postViewRender выглядят как место, где можно сделать что-то подобное, но, похоже, нет никакого способа манипулировать реальным рабочим процессом. Если кажется, что в основном до / после обработки контента. Например, кажется, что не существует способа «вернуть false», чтобы сказать, что метод renderView на самом деле не отображает представление. Или каким-либо образом повлиять на местоположение, в котором можно найти представление.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 06 августа 2011

Тайлер,

ColdBox Framework достаточно гибок. Можно делать то, что вы хотите, но я не думаю, что изменение renderView () - это лучший способ решить эту проблему, хотя вы, безусловно, можете.

Я бы посоветовал вам создать пользовательскую функцию в файле /include/helpers/ApplicationHelper.cfm, который содержит необходимую логику. Функции, добавленные в этот вспомогательный файл, доступны из любого места в структуре. Это позволит вам создать функцию с именем renderSkin (), которая содержит необходимую логику. RenderSkin () будет в конечном итоге вызывать «renderView ()», когда вы, наконец, выясните, какой шаблон вы хотите отобразить для этого пользователя.

почтение,

Аарон Гринли

0 голосов
/ 08 августа 2011

Я бы посоветовал вам пойти по маршруту перехватчика, но изменить вид вместо вида.

Из перехватчика postEvent вы можете получить ключ processedEvent из interceptData, чтобы изменитьlayout.

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

...