Конструктор страниц (многомодульное представление данных)

chameleon

Новичок
а такая схема не пойдет?
PHP:
index.php?moduleID_1=page=2;cid=1&moduleID_2=page=1;cid=2
все состояние модуля в 1 переменной (распарсишь потом как надо) - а хранить все равно в сессии, от этого никуда не денешься.
Кстати о "накой хрен нужно" имхо достаточно нормальная проблема вытекающая из определения "портлета" и наверное все "порталостроители" с ней рано или поздно сталкиваются :)..
 

SelenIT

IT-лунатик :)
chameleon
Или я тупой, или одно из двух: если
все состояние модуля в 1 переменной
то зачем понадобилось что бы то ни было
хранить все равно в сессии,
особенно когда речь идет о публичной части сайта? Не затруднит пояснить?

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

chameleon

Новичок
Не затруднит пояснить?
что конкретно пояснить? необходимость где-то хранить состояние?
особенно когда речь идет о публичной части сайта
не вижу ничего особенного в желании организовать такой же механизм и в публичной части тоже...
Нутром чувствую, что под понятиями "страница" и "модуль" во второй фразе
возможно есть путаница. Ок, как я все понял: на _веб-странице_ могут присутствовать два инстанса одного портлета, выводящие результаты с _постраничной_ разбивкой (вот откуда во второй фразе "страница"), но имеющие (ессно) одинаковый интерфейс (потому как реализованы одним и тем же классом/модулем) поэтому при клике на ссылку ведущую на страницу 2 в первом инстансе второй тоже примет этот параметр за свой и переключится также на 2-ую страницу. Имхо, вопрос был: как эффективно разграничить параметры для каждого инстанса одного и того же портлета..
о состоянии и сессиях: ессно кликать мы можем только по одной из ссылок в каком-либо одном инстансе, поэтому инстансы stateless-портлетов находящиеся на этой же веб-странице будут постоянно сбрасываться в исходное состояние. Мне больше нравится хранить такие дела в сессии (хотя да, "никуда не денешься" с моей стороны слишком категорично)...
Может я слишком много понял? :)..
 

SelenIT

IT-лунатик :)
chameleon
Спасибо. Теперь до меня дошло :)
Может быть, проще всего передавать такие параметры в виде массивов, наподобие ...?page[news]=2&page[gallery]=6&... ?
инстансы stateless-портлетов находящиеся на этой же веб-странице будут постоянно сбрасываться...
Имхо, это в любом случае будет уже не совсем та же веб-страница. Мне кажется логичным, если это отразится в их URI (тогда ссылку на нужную комбинацию состояний портлетов можно будет послать по почте или поместить в закладки, например). Сессии тут, по-моему, все-таки лишние...
 

Денч

Новичок
Может быть, проще всего передавать такие параметры в виде массивов, наподобие ...?page[news]=2&page[gallery]=6&... ?
А может, так
...?page=n2g6&...
где n - news, g - gallery
А в скрипте парсить
 

crocodile2u

http://vbolshov.org.ru
Недавно смотрел на PRADO фреймворк. Они заводят переменную __VIEWSTATE (я не знаю .NET, но вроде бы концепция взята оттуда), и в ней таскают текущее состояние.
Конкретно насчет проблемы этого топика я не смотрел, но, вполне возможно, что эта она там решена. Кстати, они (авторы PRADO) таскают все состояние в запросе (ну, насколько я понял, почитав в течение часа и поигравшись с примерами).
И, по-моему, это оптимальный вариант.
Можно ведь и обеспечить определенное взаимодействие между разными объектами (ну например, создать объект класса, в котором собираются данные о каждом из инстансов, присутствующих на странице, в том числе и "состояние" каждого инстанса).
 

kvf77

Red Devil
то Мутник:
Вот скажи мне, милый друг, такую простую вещь - а изначально ты как собирался выводить новости с разбиением на группы? Что тебе мешает сделать также второй раз? Нафига, я не понимаю, хранить эту хрень в URL? Почему не составить простую текстовую схему страницы и выводить по ней?

-~{}~ 16.06.05 09:59:

crocodile2u
странно все это - потому что обычно выдают на сстранице первые там 5 новостей каждой группы и предлагают перейти на страницу, где собраны новости данной группы. Зачем постранично листать новости разных групп внутри одной и тойже страницы? При моем подходе никаких проблем не будет. А модель с листанием я вижу не эффективной. Во всяком случае не видел сайтов, где бы это было оправдано.
 

crocodile2u

http://vbolshov.org.ru
kvf77
Кстати, да. Пока писал свою мессагу, забыл, что собирался добавить следующее:

в моей ЦМС админ также может добавить на страницу несколько объектов разных (или одинаковых) типов. Однако на проблеме состояния каждого из них я даже не заморачивался, ибо посчитал, что если уж админ поставил на одной странице кучу разных модулей, у которых свои параметры состояния, то он фактически уже безнадежно испортил страницу. И действительно, до сих пор нужды в таком механизме, который нужен автору треда, не возникало.
 

kvf77

Red Devil
crocodile2u
Мы видим, помоему, типичный пример, когда в погоне за ультра-универсальностью превращают движек в черте что. Как замечено, это происходит, когда народ пишет движек, а не создает нормальные живые проекты. В такой теоретизации и происходить создание никому не нужных вещей.
 

StUV

Rotaredom
имхо, вполне реальная, нормальная задача и вполне решимая с использованием БД, если рассматривать отдельный модуль как некоторую функцию, получающую на вход набор параметров и выдающую некий результат в виде html-контента - тогда урл менять не надо, просто в базу для каждого раздела сайта сохранять набор подключаемых модулей, последовательность подключения и наборы входных параметров для каждого модуля - какие вообще могут с этим возникнуть сложности?
 

chameleon

Новичок
kvf77
Во всяком случае не видел сайтов, где бы это было оправдано
не видел? а они есть! (с) не мой. Эти сайты называются порталами. В одной области web-mail, в другой карточка с выбранным контактом, в третьей запускается поиск по справочнику + еще туева хуча контента и все на одной странице. Причем юзеру (не админу) представляется возможность корструировать свое рабочее пространство (удалить, добавить, свернуть инстансы и т.п.)...которое ессно не сбрасывается при первом же клике..
Автор не уточнил какого рода "сайтами" он занимается но, имхо, общие принципы по огранизации "пространств имен" применимы в любой ситуации.
 

crocodile2u

http://vbolshov.org.ru
Никто не отрицает того, что есть сайты (назовем их порталами :)), где на одной странице показывается куча блоков с разнородным контентом.

Но в данном случае автор поставил вполне конкретную задачу:
есть два или более блока-списка, каждый со своей постраничной прокруткой (+набор параметров). Лично я _никогда_ не видел подобных страниц (по крайней мере таких, с которых не хотелось бы сразу же и уйти).

Есть такие страницы? URL в студию.
 

snark

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

http://aquaimperia.ru/index.php?idm=3&idarea=2&action=fullview&cid=9903&page=0&letter=192

также может быть включен еще и список со статьями на похожую тему.... вот так.
 

crocodile2u

http://vbolshov.org.ru
snark
Данная страница _не_ является иллюстрацией к обсуждению в данном топике. А тот факт, что на одной странице может находиться "куча блоков с разнородным контентом" ((c) /me, см. постом выше ), и без того общеизвестен.

Хотелось бы получить URL на страницу, например, с двумя блоками новостей, каждый со своей прокруткой по страницам.
 

kvf77

Red Devil
chameleon

то есть ты меня хочешь уверить, что весь этот монстр постоянно перегружает ВСЕ данные если ты работаешь скажем с контактом? Бред помоему. Скорее всего там iframes врядли эффективно перегружать все, что есть на странице. Во всяком случае, если все так как ты написал - то помоему кто-то не очень здоровый все это проектировал.

-~{}~ 16.06.05 15:14:

crocodile2u
ну он имеет ввиду (для примера проголосуй там слева или справа), что результат выводится тамже при обновлении страницы.
только он не прав, ему кажется, что он привел пример того, что ему надо, но на самом деле там нет интерактива - ведь голосуя, скажем, он субмитит тока 1 форму, то есть в любом случае работает только 1 какой-то компонент на странице.

-~{}~ 16.06.05 15:15:

к томуже, не в одном компоненте по сути там нет интерактива.
 

snark

Новичок
Этот сайт разработан мной. И я могу с уверенностью сказать, что данная страница содержит три объекта типа списка (три одинаковых модуля) 1) Это вывод вариантов ответа на голосование 2) Это список комметариев (просто там их два, а если будет 10 то он делит их на страницы) и 3) Это сама энциклопедия.... Что вы говорите, что там нет одинаковых модулей.... Даже если не брать в учет что объект голосования тоже имеет внутри себя объект класса списка, то явным образом в глаза кидаются ДВА списка это комментарии и энциклопедия.... вот и все....

А реализовать сохранение состояний, я решил следующим образом: Создать класс cParseLink, который будет обрабатывать всего один параметр GETa, допустим 'n_stat', в которой и будет хранится массив состояний всех объектов, где индекс в котором будет являтся ID модуля и указывать на ассоц. масив с парметрами и значениями соответственно... Потом это дело все сериализую и передаю в качестве параметра 'n_stat'. Ну и конечно доработать модули для работы с этим классом, который и будет генирировать все необходимые ссылки.

Как?
 

crocodile2u

http://vbolshov.org.ru
snark
Такой вариант решения, имхо, в общем не лучше и не хуже нескольких других предложенных. по-моему, жизнеспособен.

Ну а со ссылкой (http://aquaimperia.ru/index.php?idm...&letter=192) ты промахнулся... Если это твой сайт (и тем более, что пока он работает, по крайней мере частично, в тестовом режиме: см. комменты), ты мог бы продемонстрировать аудитории _все_ то, что хотел продемонстрировать.
 

chameleon

Новичок
то есть ты меня хочешь уверить, что весь этот монстр постоянно перегружает ВСЕ данные если ты работаешь скажем с контактом?
Скажем так, страница обновляется полностью. Насчет данных - не забывай, что такие вещи обычно просто пронизаны кэшем на всех возможных и невозможных уровнях...
то помоему кто-то не очень здоровый все это проектировал
и причем он был не один :)...честно не знаю сколько народу, например, в Oracle занято проектированием ихнего портала.
<offtop>iframe (ИМХО) большее зло чем полная перезагрузка страницы...</offtop>

-~{}~ 16.06.05 18:08:

который будет обрабатывать всего один параметр GETa, допустим 'n_stat', в которой и будет хранится массив состояний всех объектов
все-таки не пойму сокральный смысл таскать состояние всего приложения от клиента на сервер и обратно...не проще обойтись session_id?
У тебя что во все ссылки в одном инстансе будет добавляться состояние всех остальных инстансов и так везде по аналогии?
 

kvf77

Red Devil
snark
значит ты не понимаешь, что делает твой сайт, потому что я не понял - состояние чего тебе надо сохранять.
При субмите голосования - ты всегда субмитишь только 1 форму и не больше и не меньше - ты ж явно передаешь ID того вопроса по которому голосовали, поэтому я до сих пор не понял твоих затруднейи и всей этой лабуды с сохранением состояния модулей.
Либо объясни что тебе надо - либо закрой тему.

-~{}~ 16.06.05 17:14:

chameleon
iframe не использую практически нигде - но зла никакого особого не вижу от них. Как-то называли злом засорение кнопки "Назад", но в таких ситуация, которые описал ты вообще эту кнопку блокировать надо и так дале. Кеш кешем, но не думаю, что именно все так сделано.
 

chameleon

Новичок
но зла никакого особого не вижу от них
яж написал - имхо....просто субъективная неприязнь, бзик 8)...
но в таких ситуация, которые описал ты вообще эту кнопку блокировать надо и так дале
а вот поясни зачем? наоборот, все отлично работает так как надо...
 
Сверху