понедельник, 23 января 2006 г.

Внешний вид в WordPress

Делал небольшой проект на базе движка WordPress. По некоторым причинам линк на завершённый проект не привожу. :)


Итак, что требовалось:



  1. Несколько статических страниц

  2. Несколько статических страниц второго уровня

  3. Две рубрики

  4. В центре выводится одна рубрика (анонсы), в правой колонке - заголовки второй рубрики

  5. В центре выводится запись первой рубрики (правая колонка - постоянно заголовки второй рубрики)

  6. Архив. Здесь - заголовки первой рубрики.


Вроде ничего сложного? Оказалось так и есть. Ничего сложного. Поломал голову два дня я решил этот вопрос. Итак по-порядку...


 Для начала пришлось бороться с дизайнером, который понятия не имеет о div-ах, а весь дизайн сделал в table. К счастью, это всё решилось очень легко, хотя и пришлось поколдовать. Это скорее проблемы дизайна и html-кодинга, ибо бороться с дизайнерами использующими для позиционирования nbsp - можно только отрыванием рук. Другого метода мне не известно.




Для вывода категории, где мы находимся (архив, новости, другое, страницы) пришлось сделать такую структуру:


if (is_category('news')) echo "новости";

 else if (is_category('mero')) echo "меры";

  else if (is_category('archive')) echo "архив";

    else if (is_page('about')) echo "о компании";

       else if (is_singe AND in_category(1)) echo "меры";



Немного сложно? Но не забывайте ещё такой момент: бюджет программиста был очень невысок, всё писалось на коленке. :)  Правильнее было бы использовать оператор switch (см. комментарии).


Идём дальше. Правая колонка имела вид:


$posts = get_posts('numberposts=5&&category=1');

foreach ($posts as $post) : ( шаблон вывода )

endforeach; 




Теперь, в такой конструкции в правой колонке всегда выводились заголовки категории 1.


В центре немного сложнее. Немного выглядит сумбурно, но общую мысль понять можно... Используя is_category, is_single... Можно выяснить "где?" мы находимся и вывести соответствующее содержание. Смотреть описание этих тэгов стоит в инструкции вот тут.


if (have_posts()) :

while (have_posts()) : the_post();

if ( in_category('2')  AND !is_category('mero')) { шаблон вывода тут}


else { if (is_page()) { другой вариант шаблона вывода}




if (is_category('news')) { // Выводим архив новостей

третий вариант шаблона для вывода   }

if (is_category('mero')) { // Выводим архив новостей

... тут аналогично.


UPDATE. Немного сократил первоначальный пост, но так понятнее.

 

7 коммент.:

  1. "Для вывода категории, где мы находимся" красивее было бы использовать "switch", а не "if". Дальше не осилил хитросплетение кода :)

    ОтветитьУдалить
  2. Согласен на 200%...
    Но если принять во внимание два пункта
    1. Страницы добавлялись внезапно и обещались исчезнуть
    2. Время когда мне об этом сообщалось колебалось от 23 до 4 часов :)
    Да, я согласен, даже думал убрать. И сделать через switch, но потом проект захлестнул волной и было не до этого

    ОтветитьУдалить
  3. а у меня два вопроса или даже предложение других решений этих проблем :-)):
    1. почему было не использовать для названия категорий русские слова, тогда бы без всяких if обошлось бы
    2. для вывода постов одной конкретной категории можно еще просто создавать страницу category-#id.php и помещать ее папку с темой. (#id - это id категории, которое всегда можно посмотреть в админке) WordPress перед выводом категории сначала ищет как раз такой файл, потом, если не находит, идет в файл category.php, если там нет описанного случая, то archive.php, а потом уже и вовсе index.php
    Хотя, Вы наверное и так все знаете, я на всякий случай пишу, вдруг кто будет сталкиваться с подобными проблемами и случайно это увидит :-))

    ОтветитьУдалить
  4. Спасибо, yantar! Отвечаю по пунктам:
    1. if-ы не потому что "echo". В примере я немного упростил, там сложнее идёт процесс, а это - упрощение.
    2. Как-то не знал о category-#id... Спасибо! :) в следующий раз буду так юзать.

    На мой взгляд, документация не очень удобная к вордпрессу. Читать её от корки до корки, чтобы быть в курсе - немного неправильно. А найти сразу, то что нужно - сложно :)

    Ещё раз спасибо за советы!

    ОтветитьУдалить
  5. что касается документации - абсолютно согласна
    а мне вот очень помогло, что Вы привели кусок кода с get_posts, эта функция мне была неизвестна
    так что тоже большое спасибо! :-)

    ОтветитьУдалить
  6. Пожалуйста, yantar! ;-) жаль, что вы не оставили ссылку на свой блог.

    Если вы знаете что-либо интересное из кухни вордпресса - поделитесь, будет полезно и интересно! :)

    ОтветитьУдалить
  7. я в первом комменте оставляла :-) мой блог как раз содержит всякое брюзжание по поводу несовершенства вордпресса и попытки это несовершенства исправить :-)

    ОтветитьУдалить