Время от времени возникает необходимость иметь прямо посреди контента страницы динамическую часть.
Проблема в том, что стандартный шаблонизатор обычно (вроде как) берет содержимое страницы цельным куском и никак его не интерпретирует (грубо говоря, переменная content подставляется в то место шаблона HTML-верстки, которое предназначено для содержимого страницы), поэтому никакой динамики там не получится.
Для решения такой задачи я вижу два способа:
1. Для каждого такого случая делать отдельный шаблон.
Такой вариант мне не нравится, т.к. это нарушает принцип разделения представления от содержимого - в таком случае содержимое страницы фактически будет храниться не вместе с остальными страницами где положено, а в шаблонах. Так быть не должно.
2. Сделать данные страниц интерпретируемыми, т.е. в тексте искать специальные конструкции.
Такое решение еще хуже: во-первых, придется перелопачивать гораздо больше строковых данных. Во-вторых, при составлении текстов страниц придется держать в голове, что какие-то символы или их комбинации (пусть и редко встречающиеся) являются специальными. Такого быть не должно.
В общем, решения как на подбор - одно хуже другого. Может, я что-то еще упустил..
Просветите, как эта проблема решается.
P.S. Хотел запостить вопрос также на Хабре. Мало того, что я пять минут искал, как там выбрать раздел и начать новую тему, так еще и оказалось,что простые люди там начать тему не могут - недостаточно кармы. Да-а...
динамическое содержимое прямо в тексте страницы
31 июля 2009, 8:30
Автор: 1234ru
|
|
burЕсли хочется наибольшей масштабируемости, то лучше совместить оба некрасивых подхода:1) Раз контент динамический, то в любом случае потребуется шаблон и модуль. 2) Для вставки динамического контента в статичную часть можно изобрести простую конструкцию инклуда и скармливать её шаблонизатору. Fastcoder.org — портал для JavaScrpt-программистов
|
31.07.2009, 11:33 Ответить |
|
NO USERPIC
|
rgbeastЭто проблема интерпретации цельным куском. Надо уйти от цельности и немножно наружить единую картину мира, но зато получить в руки гибкость. Посмотри как сделано на online.webew.ru в модуле проверки заданий. Бывают ситуации, правда, когда единую картину нарушать запрещено (например распределенные приложения), но тогда упс, будет грооздко. Если ты думаешь, что унификация и гибкость одновременно достижимы, то представь себе как взвод солдат танцует лезгинку. |
31.07.2009, 21:03 Ответить |
|
1234ruЦитата: Бывают ситуации, правда, когда единую картину нарушать запрещено (например распределенные приложения), но тогда упс, будет грооздко. Вот об этом, если можно поподробнее. 1. Что понимается под распределенными приложениями и почему в таком случае запрещено? 2. Как же в этом случае выкручиваются? То, что не убивает нас, делает нас инвалидами.
|
31.07.2009, 21:40 Ответить |
|
NO USERPIC
|
rgbeast1. есть, например, 100 серверов, которые хранят информацию о сессиях юзеров, причем информация разбита по номеру сессии. И еще 100 серверов - фронт-энды, формируют страницы, на основе информации, полученной от первых 100 серверов. Без формирования полной инфы за один проход не обойтись, так как происходит обмен данными между серверами.2. Продумывать полностью протокол от начала до конца. Если потребуется фича нового типа, возможно потребуется расширять протокол. В Яндексе сервера между собой передают XML (и они умеют его понимать). |
31.07.2009, 22:17 Ответить |
|
1234ruВ общем, я думаю, что действительно придется сделать конструкцию специальную прямо в содержимом страницы (собственно, можно разрешить прямо из страницы вызов модуля; я тут ничего страшного не вижу; создание каких-то дополнительных сущностей типа специальных модулей для страниц, на мой взгляд, приедет только к усложнению архитектуры и программного кода).Но! Сделать у страниц специальное поле is_dynamic. Специальным образом будут обрабатываться только те страницы, у которых это поле TRUE. Это позволит избежать поголовной проверки содержимого всех страниц и не допустить таким образом снижения производительности. зато уж у динамических страниц будут проверяться вообще все поля, а не только содержимое (т.к. динамика может быть и в заголовке да и вообще где угодно). Как вам? То, что не убивает нас, делает нас инвалидами.
|
02.08.2009, 00:07 Ответить |
|
NO USERPIC
|
GirlsBabyПомойму в полне адекватно. Остается это только реализовать. |
02.08.2009, 14:27 Ответить |
|
1234ruА легко довольно реализовать: просто функция, вытаскивающая содержимое страниц, проверяет поле is_dynamic и в случае TRUE прогоняет эту страницу через шаблонизатор.(шаблонизатор-то уже есть - надо его закончить, наконец, тестировать, и выложить тут статью) То, что не убивает нас, делает нас инвалидами.
|
02.08.2009, 22:47 Ответить |
|
NO USERPIC
|
GirlsBabyВыкладывай обязательно на общий тест. |
03.08.2009, 16:54 Ответить |
|
NO USERPIC
|
alexbortovЕсть какие-нибудь наработки по данной теме? Тоже интересует реализация динамического содержания в тексте. |
25.11.2009, 14:32 Ответить |
|
1234ruДа, наработки есть. В частности, на таком движке работает данный сайт. В использовании прост, состоит из одного PHP-файла где-то на 400 строк кода с комментариями.Его нужно немного "причесать" - убрать кое-какие нерациональные части в коде и упростить синтаксис (думаю, что это произойдет где-то в январе), после чего устрою тестирование и выложу здесь с описанием, как пользоваться. То, что не убивает нас, делает нас инвалидами.
|
27.11.2009, 03:12 Ответить |
|
NO USERPIC
|
Стасинтересно как это на деле сделать! |
24.03.2010, 15:32 Ответить |
|
1234ruЧерез некоторое время я напишу на эту тему статью (в основном, она будет посвящена шаблонизатоу).То, что не убивает нас, делает нас инвалидами.
|
25.03.2010, 02:51 Ответить |
© 2007—2010 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
