все дополнения одного цвета..
Сегодня вообще утвердились четкие
Пусть он рекламирует на
Во-первых, нарядиться век все красное — очень нехитрая и эстетически бедная задача, во-вторых, пальто и шапка, сумочка и варежки — это все вещи из разного материала, разной фактуры, их красный цвет должен сочетаться особым образом, а иначе не совпадает и подбирается приблизительно и весь «гарнитур» оказывается более безвкусным, чем мягкое сочетание разных цветов..
Главное — не это.
А маме, конечно, стоит
Другой эстетический принцип по] отношению к цвету — это знание того, что законы красоты и сочетания цвета различаются по тому, к чему это сочетание относится...
Горение земляники в листве, особенно после дождя, — это прекрасно, а красный свитер с зеленой юбкой — это в обычном случае неудачное сочетание..
Выдавать себя не за
Мы не должны этого

На сайте drupal.ru я в свое время поднимал вопрос о способе создания статейно-новостного сайта с несколькими лентами новостей и набором статей, разложенных по тематикам. Сейчас мне порядком удалось разобраться, хочу поделиться найденными приемами.
Для конкретики, задача состоит в следующем: создать сайт нижеследующей структуры:
- Новости
-- Тематика 1
-- Тематика 2
- Статьи
-- Тематика 1
-- Тематика 2
При этом просмотр раздела "новости" должен давать нам все новости сразу: и те что проходят по "тематике 1" и те, что проходят по "тематике 2". Аналогично со статьями. Если мы решаем эту конкретную задачку, то мы получаем универсальный способ, который позволит нам в дальнейшем реализовывать любую аналогичную структуру, вне зависимости от количества и вложенности тематик и подтем.
Статьи во всех разделах сортируются хронологически. Формально, это получается разновидность блога, правда, весьма продвинутая.
Кроме того, у друпала есть приятная возможность привязывать к какждой рубрике (что отдельной, что собирательной) RSS-канал, содержание которого полностью дублирует соответствующую страницу сайта, что дает посетителю сайта возможность легко подписаться на все новости на ту или иную тему. Это очень удобно и грех этой возможностью не воспользоваться.
Итак: как данную схему лучше реализовать на друпале?..
* Лирическое отступление:
В терминологии drupal упоминается термин "breadcrumbs" (хлебные крошки). Я не знаю, является ли он устоявшимся, но в данном контексте это меня не интересует. Означет этот термин навигационную линейку в верхней части страницы, которая позволяет перейти с данной страницы на любой вышестоящий документ (например, перейти от новости к списку новостей), а заодно очень неплохо описывает положение текущей страницы в общей структуре сайта. Следует усвоить, что breadcrumbs - штука нужная и важная, без нее стройный сайт превращается для пользователя в неструктурированную свалку сообщений.
_______________________________________
Итак, каков традиционный способ создания "рубрицированного блога" на друпале?
Пункт 1. Создается структура рубрик, как терминов одного словаря. На внешнем виде сайта это никак не отражается, это дерево показывается только в форме добавления нового сообщения на сайт. (Из этого, тем не менее, следует, что создание данного дерева - вещь обязательная, кроме того, нельзя его тупо сваливать в одну кучу, т.к. пользователям, добавляющим на сайт новости, будет проще разобраться в списке рубрик, если они сделаны в виде дерева, чем если все они идут одной колонкой, в столбик.)
Пункт 2. Создаются пункты меню вида
-Новости: taxonomy/term/1
--Тематика 1: taxonomy/term/2
--Тематика 2: taxonomy/term/3
Какой именно путь писать в свойствах очередного создаваемого пункта меню - нужно смотреть в свойствах соответствующего термина, которому мы этот пункт меню собираемся сопоставить.
Каждый пункт меню ведет на страницу того или иного термина. На этих страницах пользователю будут в хронологическом порядке показаны все узлы, в свойствах которых была указана принадлежность к соответствующему термину. Показаны в сокращенном варианте.
Минусов несколько:
Во первых, структура сайта у нас создается дважды: сначала в виде дерева терминов, затем - в виде идентичного ему дерева пунктов меню. Это извращение. Мало того, что нам приходится дважды выполнять работу, так мы еще и легко можем сделать ошибку, т.к. разделам структуры автоматически назначаются номера, и мы эти номера должны запоминать и переносить в меню. Кроме того, работа по добавлению новых разделов сайта перестает быть простой и очевидной. Пусть даже добавление нового раздела - это не добавление новой статьи, дело не такое частое. Но все равно неприятно.
Второй минус - страницы с полными вариантами статей (узлы) почему-то отображаются без breadcrumbs. На страницах терминов breadcrumbs отображаются правильно, а на страницах узлов состоят из одного единственного пункта - ссылки на главную страницу, создавая у пользователя впечатление, что все статьи на сайте являются для главной страницы дочерними. Это некрасиво.
Третий минус мы обнаруживаем, когда начинаем сравнивать созданное с заданием. Мы обнаруживаем, что на странице "Новости" мы не видим новостей вообще. Т.е. если добавить новость непосредственно в эту категорию, мы ее увидим. Но предполагалось-то, что этот раздел будет чисто формальным, и что на нем просто будут собираться все новости из тех или иных новостных рубрик. А этого не наблюдается.
_______________________________________
Продвинутый способ создания "рубрицированного блога" на друпале.
Почитав поподробнее про модуль таксономии, мы с удивлением обнаруживаем, что он позволяет нам в одной новостной ленте объединять несколько. Достаточно перечислить их все в URL через плюс. Так, скажем, страница
taxonomy/term/2
выдаст нам новостную ленту тематики, получившей второй номер. Всех узлов, привязанных к термину номер 2. А вот страница
taxonomy/term/2+3
выдаст нам комбинированную новостную ленту, где будут перемешаны новости тематик два и три.
После этого мы вспоминаем, что, вообще-то, нас в ссылке, на которую будет вести пункт меню, никто не заставляет указывать только одну тематику. Мы можем указать и две и три. И вообще сколько угодно. И вообще любой адрес. В результате, наше меню приобретает вид:
-Новости: taxonomy/term/2+3
--Тематика 1: taxonomy/term/2
--Тематика 2: taxonomy/term/3
При щелчке на первый пункт меню, мы увидим все новости из дочерних новостных лент. А нам того и нужно. Если появится еще одна дочерняя лента, мы должны будем добавить ее в структуру рубрик, потом прописать для нее пункт меню, а затем добавить ее номер во все вышестоящие пункты меню.
Попутно, у нас возникает неожиданная проблема. Почему-то при щелчке на верхний пункт меню ("Новости"), меню не разворачивает подпункты, хотя должно это делать. Можно, конечно, в свойствах меню поставить "всегда развернутое", но это некрасиво.
Экспериментальным способом мне удалось выяснить, что это глюк, и что модуль menu некорректно отрабатывает наличие плюса в адресной строке. Как вариант решения, можно использовать модуль path, который позволяет переопределить одни URL на другие. Вообще, это предназначено для красоты. А нам вот получается вообще жизненная необходимость. В результате, наше меню приобретает вид:
- "Новости" - path: taxonomy/term/1+2+3 - alias: /news
-- "Тематика 1" - path: taxonomy/term/2 - alias: /news/tematika-1
-- "Тематика 2" - path: taxonomy/term/3 - alias: /news/tematika-2
Некоторое время спустя, удается выяснить еще более простой и красивый способ. Оказывается, синтаксис taxonomy/term подразумевает два параметра. Первый параметр - список терминов, которые надо показывать. Через плюс - объединение множеств. Через запятую - пересечение множеств (т.е. показ только тех узлов, которые принадлежат, например, обеим перечисленным темам). Но есть и второй параметр - глубина. Показывать узлы, принадлежащие терминам и их подтерминам до такой-то глубины. То что нам и нужно. Кроме того, второй параметр может быть не цифрой, а "all". В этом случае берутся все узлы всех подтерминов без исключения.
- "Новости" - path: taxonomy/term/1/all - alias: /news
-- "Тематика 1" - path: taxonomy/term/2/all - alias: /news/tematika-1
-- "Тематика 2" - path: taxonomy/term/3/all - alias: /news/tematika-2
Тоже не фонтан, но по крайней мере, избавляет от необходимости перечислять в URL все подразделы. (Кстати, при таком перечислении, заголовок показываемой страницы превращается в список всех выбранных рубрик, перечисленных через запятую, что не очень красиво.)
Чересчур навороченно, но зато работает почти как дОлжно. Минусы:
1) Многовато действий по добавлению на сайт очередной тематики. Легко запутаться и ошибиться.
2) По прежнему, не работают breadcrumbs для узлов.
_______________________________________
Таксономический способ создания "рубрицированного блога" на друпале.
Дальнейшее изучение документации и форумов показало, что есть модуль, который устраняет в аккурат оба указанных недостатка. Есть модуль taxonomy_context. Если его установить и включить, то у узлов появляются нормальные breadcrumbs, такие же как у терминов. И структура меню создается автоматически, нам не нужно создавать ее вручную. Но при этом, увы, то и другое теперь отрисовывается, основываясь на схеме терминов (она в контексте терминологии Drupal называется "таксономией"), а не на вручную создаваемом меню.
Почему "увы"? Потому что решив эти две проблемы, мы в полный рост получаем выползание той проблемы, которую только-только успели решить. А именно: у нас пропадают вложенные новостные ленты. Ссылки, которые автоматически создает taxonomy_context имеют вид
taxonomy/term/1
а не
taxonomy/term/1/all
А значит, когда мы будем переходить в раздел, скажем, "Новости", вместо общего списка новостей мы получим надпись "извините, нет статей в этой категории".
Попытка выяснить у автора модуля taxonomy_context, может ли он решить эту проблему, привела к неудаче. Он сказал, что модуль слишком тесно завязан на пути без /all, поэтому просто добавить эту строчку не получится.
К счастью, оказалось, что к проблеме можно подойти с тыльной стороны: можно сделать так, что модуль таксономии будет любой подобный URL интерпретировать так, будто там уже указано /all. Для этого надо в модуле taxonomy.module, в функции taxonomy_select_nodes() найти строчку:
$tree = taxonomy_get_tree($term->vid, $tid, -1, $depth);
и поменять ее на:
$tree = taxonomy_get_tree($term->vid, $tid, -1, NULL);
Это установит глубину для всех терминов в NULL, что означает "all".
Минусы такого подхода:
Нам приходится патчить ядро, а значит, нам надо не забывать применять этот патч каждый раз, когда мы обновляем версию движка.
Однако после такой замены, у нас и хлебные крошки работают хорошо, и меню создается автоматически, под структуру.
Я надеюсь, эти выдержки помогут тем, кто собирается делать на Drupal что-то аналогичное той структуре, которую я приводил в начале данной статьи.
Ну а разница между статьями и новостями обычно заключается в том, что новости мы выводим на странице термина полностью (они небольшие), а вот от статей выводим только заголовки. Во всяком случае, обычно принято делать именно так. Для того, чтобы оставить от статьи показ только заголовка, нужно прямо в начале статьи воткнуть пустую строчку, а на вторую строчку поместить тэг <!--break-->. Обратите внимание: не на первую! Иначе не будет работать.