Перейти к содержимому


- - - - -

Свои вставки кода. Идея.


  • Авторизуйтесь для ответа в теме
В теме одно сообщение

#1 SeoNizator

SeoNizator

    Участник

  • Пользователи
  • PipPip
  • 25 сообщений

Отправлено 12.11.2009, 13:35

В процессе создания сайтика на Зебре захотелось мне выводить разные блоки (рекламные в данном случае) на разных страницах.

Отсюда возникла идея - подключение различных кусков кода в зависимости от выдаваемой страницы.
Как я это вижу.

Пользователь создаёт файл с кусками кода вида:
property = "myproperty";
swith1
{код1};
swith1
{код1}
...
swith default
{кодN}

В самой странице добавляем своё свойство
@@myproperty=3,5 //показывать swith3 и swith5 

Ну и в шаблоне (или контенте), где надо прописываем вызов этого свойства.

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

#2 support

support

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 1 140 сообщений

Отправлено 12.11.2009, 18:17

Свойства страницы страницы:

@@title=Страница
@@_ads=1,2
Текст страницы

Код в шаблоне, где требуется вывести баннеры:
<?php
$ads = preg_split('/\s*,\s*/', trim(z_page()->getProperty('_ads', '')), -1, PREG_SPLIT_NO_EMPTY);
if (count($ads)) {
	$ads_html = array();
	$ads_templates = array(
		'1' => '<a href="">...</a>',
		'2' => '<a href="">...</a>',
		'3' => '<a href="">...</a>',
	);
	foreach ($ads as $ad) {
		if (isset($ads_templates[$ad])) {
			$ads_html[] = $ads_templates[$ad];
		}
	}
	echo implode('', $ads_html);
}
?>

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

Если не привязыватья к одному месту, а говорить обо всей странице, то можно сделать иным способом:

Свойства страницы страницы:

@@title=Страница
@@_ads=banner_1,banner_3
<p>Текст страницы</p>

<!--adv!banner_4-->

Часть шаблона:

<div>
<!--adv:banner_1-->
<!--adv:banner_2-->
</div>
<div><?php z_html(); ?></div>
<div>
<!--adv:banner_3-->
<!--adv:banner_4-->
<!--adv:banner_5-->
</div>

Создаем преобразователь от ztransform_interface (как пример, можно посмотреть на ztransform_split), задачей которого будет разбить свойство @@_adv и сохранить его как свойство объекта страницы в виде массива, и прописываем его в настройках движка.

Создаем плагин для лайта и цепляемся к событию ztemplate.postdraw. В вызваемом методе делаем замену всех конструкций <!--adv:****--> на HTML код, если в свойстве страницы указано выводить этот баннер, или на пустую строку в противном случае. Так же все конструкции <!--adv!****--> заменяем в любом случае. Тексты для баннеров HTML берутся из какого-то файла. Прописываем плагин в настройках движка.

После этого баннеры можно выводить как в теле страницы, так и в шаблоне + возможность управлять, какие баннеры выводить в шаблоне. Так же можно выводить какие-то по умолчанию, если на странице не указаны баннеры.

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

P.S. Приведенные в посте примеры кода не тестировались.




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 скрытых пользователей