WordPress as CMS

Рубрика: WordPress -> Лаборатория
Среда, 4 июля 2007 г.
Просмотров: 3684
Подписаться на комментарии по RSS
]]>
]]>

В этой рубрике я буду выкладывать те заметки, которые могут быть интересны тем, кто хочет разобраться во внутренней «кухне» WordPress'а. Но всё, что будет публиковатья в «Лаборатории» предназначено только для исследований.

И хотя WordPress в общем-то и так CMS, разве что адаптированная под блоги, но все равно имеющая одну проблему, которая заключается в том, что WordPress вроде как «вещь в себе». Поэтому использовать WordPress не по назначению не так-то и просто.

Поскольку термин «WordPress as CMS» уже устоявшийся, то я буду подразмевать под этим такое использование (или переделку) WordPress'а, которое позволит использовать его в нестандартном варианте (как угодно).

Предположим, нам нужно реализовать на базе WordPress'а вывод обычных страниц. То есть нас не интересует блоговая система. В WordPress'е для этого можно использовать постоянные страницы (мы говорим в терминах WordPress!). То есть, даже если мы перепишем функции вывода страниц под конкретные наши запросы (вместо стандартных), то все равно столкнемся с несколькими сложностями.

1. Шаблон

То мессиво кода, которое находится в default-шаблоне вызывает стойкое отвращение. Многие до сих пор используют именно этот код, хотя практически с любой точки зрения его давно следовало бы переписать. В нем встречаются множество дублирующихся кусков, да и сама структура выполнена не в идеальном виде.

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

Но главное ограничение - это то, что в таком шаблоне (и вообще во всех аналогичных) существует большая проблема по созданию нестандартных страниц и записей. По большому счету в WordPress'е нет никаких проблем сделать кастомизацию вывода для различных страниц (записей), рубрик, архива и т.д., включая их типы, и их номер (id). Например для одной рубрики задать один шаблон, для другой другой и т.д. И все эти вещи уже есть в WordPress'е! Например использование метаполей делает настройки любой записи практически безграничными. Но всё упирается именно шаблон.

Не могу утверждать, что у меня уже есть абсолютно идеальный шаблон. Но как минимум у него нет тех ограничений, которые присутствуют в Кубрике. Большинство идей я привел в учебном шаблоне RIONI (см. архив рассылки). И если вы хотите делать действительно нормальные шаблоны, то вам следует ориентироваться именно на него.

2. Внутренняя структура данных

При запуске WordPress выполняет инициализацию, где считывает настройки, данные и т.д. Казалось бы, если мы хотим получить свой вывод данных (например 7, 3 и 6 записи), то можно было бы как-то заставить WordPress не выполнять default SQL-запрос, а выполнить наш. И вот тут-то мы сталкиваемся с другой проблемой.

Дело в том, что структура данных, которую нужно получить, формируется не из SQL-запроса, а из query_vars - переменных на основе которых уже и стоится SQL-запрос.

Проблема усугубляется еще и тем, что даже если вы сделаете абсолютно пустой шаблон, то WordPress все равно сформирует запрос и выполнит его. Даже если эти данные вам никогда не потребуются.

Для чего так делается? Поскольку в блогах принято выводить данные в определенном порядке, то проще сразу же при инициализации получить все данные и, после, в шаблоне через цикл его вывести.

Если вы думаете, что каждая итерация цикла TheLoop генерирует новое обращение к БД, то ошибаетесь. Все данные уже хранятся в массиве (точнее объекте), а сам вывод это обычный обход его в цикле.

Для того, чтобы это продемонстрировать сделаем очень простой шаблон.

Создайте каталог для нового шаблона (я его назвал NULL). В каталог поместите обычный style.css, где укажите название шаблона. Поместите в каталог index.php с таким содержимым.

  1.  <?php
  2.  function pr($var) {
  3.   echo '<pre>';
  4.   print_r ($var);
  5.   echo '</pre>';
  6.  }
  7.  pr($wp_query);
  8.  ?>

Функция pr() выполняет вывод массива или объекта и мы её создали только для того, чтобы вывести в браузере в виде преформатированного текста. В общем обычная отладочная php-функция.

То есть у нас получился абсолютно пустой шаблон, без единой WordPress'овской функции. Теперь переключитесь на него в админ-панели и убедитесь, что $wp_query оказалась полностью заполненной (если у вас в тексте html-тэги, то тогда просмотрите исходный код страницы). В ней содержатся и тексты, и заголовки, указан типы данных и т.д., и т.п.

Переменная $wp_query - "сердце" WordPress'а. Внимательно посмотрите на его поля и вы поймете откуда и что берется. Например SQL-запрос ([request]) автоматически формируется из массива [query_vars]. То есть, чтобы изменить сам запрос нужно изменить значение этих полей.


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

]]>twitter.com Google Buzz google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru]]>

Комментариев: 6

Вы можете получать новые комментарии к этой записи по RSS или оформить подписку на все комментарии сайта. Или даже на все новые записи сайта. (Не знаете, как это сделать?)
  1. 2007-07-04 в 18:29:34 | Attlant

    Хорошая заметка, а что самое хорошее - нужная... если пробежаться по форумам, то можно за пол-года создать ряд публикаций и благополучно выпустить книгу "Wordpress - человекопонятным языком" smile

  2. 2007-07-05 в 14:56:51 | iww

    А где можно скачать этот шаблон RIONI

  3. 2007-07-05 в 15:29:50 | Максим

    В 24-28 выпусках рассылки я рассказал обо всех этапах создания шаблона. Окончательный вариант в поледнем выпуске: http://maxsite.org/ras28

  4. 2007-07-06 в 03:59:17 | Кофе man

    Хорошая рубрика, ждем продолжения.

  5. 2007-07-26 в 21:19:43 | sonika
    Хорошая заметка, а что самое хорошее - нужная... если пробежаться по форумам, то можно за пол-года создать ряд публикаций и благополучно выпустить книгу "Wordpress - человекопонятным языком"

    «Кто-то» уже приступил smile

    http://groups.google.ru/group/wordpress-book

    Макс, а ведь это идея. У тебя уже готовая книжка, причем из собственных материалов!

  6. 2007-07-27 в 00:05:35 | Максим

    Какая же это идея? Фигня на постном масле. А вот почему расскажу в июльском обзоре. ;)

Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки. Если вы зарегистрированы в Твиттере, то перед логином укажите «@», например: @maxsite

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email.
(При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д.)



grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

(обязательно)