webew
Войти » Регистрация
 
PHP
Управление содержимым

динамическое содержимое прямо в тексте страницы

31 июля 2009, 8:30
Автор: 1234ru
Время от времени возникает необходимость иметь прямо посреди контента страницы динамическую часть.
Проблема в том, что стандартный шаблонизатор обычно (вроде как) берет содержимое страницы цельным куском и никак его не интерпретирует (грубо говоря, переменная content подставляется в то место шаблона HTML-верстки, которое предназначено для содержимого страницы), поэтому никакой динамики там не получится.

Для решения такой задачи я вижу два способа:

1. Для каждого такого случая делать отдельный шаблон.
Такой вариант мне не нравится, т.к. это нарушает принцип разделения представления от содержимого - в таком случае содержимое страницы фактически будет храниться не вместе с остальными страницами где положено, а в шаблонах. Так быть не должно.

2. Сделать данные страниц интерпретируемыми, т.е. в тексте искать специальные конструкции.
Такое решение еще хуже: во-первых, придется перелопачивать гораздо больше строковых данных. Во-вторых, при составлении текстов страниц придется держать в голове, что какие-то символы или их комбинации (пусть и редко встречающиеся) являются специальными. Такого быть не должно.

В общем, решения как на подбор - одно хуже другого. Может, я что-то еще упустил..

Просветите, как эта проблема решается.

P.S. Хотел запостить вопрос также на Хабре. Мало того, что я пять минут искал, как там выбрать раздел и начать новую тему, так еще и оказалось,что простые люди там начать тему не могут - недостаточно кармы. Да-а...
Добавить комментарий
Отображение комментариев: Древовидное | Плоское

bur

Если хочется наибольшей масштабируемости, то лучше совместить оба некрасивых подхода:
1) Раз контент динамический, то в любом случае потребуется шаблон и модуль.
2) Для вставки динамического контента в статичную часть можно изобрести простую конструкцию инклуда и скармливать её шаблонизатору.
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

rgbeast

1. есть, например, 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
Ответить
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
© 2008—2024 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100

Реклама: