Мой сайт о WordPress и PHP
 
Rss2Email
31 августа 2006

Выпуск 12. Особые страницы шаблона

Читали 4177 раз
Рубрика: E-mail рассылка
Навигация: Главная » WordPress » E-mail рассылка

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

Особые страницы шаблона

Иногда нужно каким-то образом подключить к шаблону свою особую страницу, например какой-либо php-скрипт. То есть вам не достаточно воспользоваться static page, поскольку на ней нельзя выполнить PHP-код.

Эту задачу в принципе можно решить несколькими способами. Например подключить свой файл как плагин и "повесить" фильтр (hook) на нужное событие. Но есть решение несколько попроще и, как мне кажется, более управляемое.

Задача, которую предстоит решить - это каким-то образом заставить WordPress "подключить" наш файл (назовем его file.php - его необходимо поместить в каталог шаблона).

Поскольку WordPress изначально использует файл index.php (или home.php, но обычно его не используют), то откроем его и в самом-самом начале напишем код:

<?php
if ($_GET['file'] == 1) {
  include ( TEMPLATEPATH . '/file.php' );
  exit;
  }
?>

Следующий код в шаблоне (обычно <?php get_header(); ?>) должен находиться сразу после вышепреведенного без пробелов. Если этого не сделать, то WordPress может выдавать сообщение об ошибке "header".

Этот код делает очень простую вещь. Он смотрит глобальный массив _GET, в котором хранятся все переменные и их значания переданные через строку браузера.

Например: http://сайт/index.php?file=1&drugoe=2 - если вы сформируете таким образом строку запроса в браузере, то массив _GET будет содержать элемент "file" равный "1" и "drugoe" равный "2".

Таким образом, для того, чтобы обратиться к особой странице нам нужно сформировать ссылку вида: http://сайт/?file=1

Здесь не желательно использовать в качестве названия параметра ("file") зарезервированные имена и имена уже существующих рубрик, поскольку, если вы используете ЧПУ, может произойти неверная адресация.

Как сформировать такую ссылку? Можно конечно её жестко прописать, но, если вы будете менять шаблоны или адрес сайта (например тестировать на localhost), то это будет просто неудобно. Поэтому мы заставим WordPress самостоятельно указывать адрес сайта:

<a href="<?php bloginfo('url'); ?>/?file=1">Наша ссылка</a>

Практика

Чтобы закрепить полученные знания давайте для примера сделаем отдельную страничку для вывода всех рубрик единым списком.

Вначале сделайте копию index.php и сохраните её как all_rubr.php.

Откроем index.php и в самое начало запишем:

<?php
if ($_GET['all_rubr'] == 1) {
  include ( TEMPLATEPATH . '/all_rubr.php' );
  exit;
  }
?>

После этого откроем файл, где будет указана наша ссылка на страницу, например в sidebar.php. Пишем:

<a href="<?php bloginfo('url'); ?>/?all_rubr=1">Все рубрики</a>

Теперь открываем файл all_rubr.php. Удалите все строчки, которые отвечают за вывод записей и оставьте только "каркас". Добавьте примерно такой код:

<h1 class="storytitle">Все рубрики</h1>
<div class="storycontent">
<ul>
<?php
wp_list_cats('sort_column=menu_order&optioncount=1&hide_empty=0');
?>
</ul>
</div>

Естественно у вас могут оказаться другие названия css-классов. Также вы можете изменить параметры wp_list_cats (вы можете её просто скопировать из своего sidebar.php).

Преимущества

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

Возьмем для примера плагин для голосований Democracy. Чаще всего его "вешают" в сайдбар. Но можно и просто сделать отдельную страничку голосований. В этом случае вам и пригодится предложенный мной способ.

Можно улучшить

Вы можете модифицировать обработку _GET, чтобы использовать одно имя параметра, но с разными значениями. Это пригодится, если у вас будет несколько своих страниц и ссылаться на них можно будет так:

<a href="<?php bloginfo('url'); ?>/?mypage=1">Файл1</a>
<a href="<?php bloginfo('url'); ?>/?mypage=2">Файл2</a>
<a href="<?php bloginfo('url'); ?>/?mypage=3">Файл3</a>
<a href="<?php bloginfo('url'); ?>/?mypage=4">Файл4</a>

Тогда в index.php:

<?php
if ($_GET['mypage'] == 1) {
  include ( TEMPLATEPATH . '/file1.php' );
  exit;
  }
if ($_GET['mypage'] == 2) {
  include ( TEMPLATEPATH . '/file2.php' );
  exit;
  }
if ($_GET['mypage'] == 3) {
  include ( TEMPLATEPATH . '/file3.php' );
  exit;
  }
if ($_GET['mypage'] == 4) {
  include ( TEMPLATEPATH . '/file4.php' );
  exit;
  }
?>

Думаю, понятно. :-)

Добавьте свой сайт

И напоследок информация для тех, кто может просто ещё не в курсе. На форуме поддержки WordPress вы можете добавить информацию о своем сайте. Все бесплатно.

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

3 комментария к “Выпуск 12. Особые страницы шаблона”

  1. sonika:

    Максим, а как можно ссылку
    /?mypage=1">Файл1
    привести в соответствие со своими ЧПУ?
    К примеру, если у меня ЧПУ /%category%/%postname%/ ?

    (/mypage/">Файл1 не работает...)

  2. Максим:

    Честно говоря я про такое даже и не думал. :)

    Первое, что приходит на ум, то можно задать любой адрес, а в самом шаблоне (вместо $_GET['all_rubr']) проверять его через $_SERVER['SERVER_NAME'] и $_SERVER['PHP_SELF'].

  3. Вячеслав:

    У Вас очень интересный сайт! Мне очень понравилось!


Оставьте комментарий! (Вы согласны с правилами)

 

:mrgreen: :neutral: :twisted: :arrow: :shock: :smile: :???: :cool: :evil: :grin: :idea: :oops: :razz: :roll: :wink: :cry: :eek: :lol: :mad: :sad: :!: :?:

При добавлении кода (html, php) заменяйте < на &lt; и > на &gt;.
Внимание: антиспам - зверь! Копируйте своё сообщение перед отправкой. На всякий случай.