Реклама между новостями, постами. Re-Pack
|
|
|
2012-10-06Дата: Суббота, 06.10.2012, 08:53 | Сообщение # 1 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
Наверное, стоит еще раз напомнить, что:
Quote (class=alert) На хостинге юКоз, по умолчанию, используется библиотека jQuery, и подключается она автоматически, то бишь, ничего дополнительно прописывать не нужно.
Quote (Info) Все способы, кроме первого НЕ работают при включенной функции: «Использовать аякс для переключателей страниц»
Иногда возникает необходимость вставить информационные или рекламные блоки между материалами в модулях или на форуме. Здесь рассмотрим разные способы, применимые именно для модулей.
Информационный блок (или блоки) можно добавить между материалов несколькими принципиальными методами:
1. При помощи условных системных операторов юКоз. 2. При помощи JavaScript. 3. Комбинированный - и то и другое.
Рассмотрим все варианты по порядку, и примеры использования.
Способ первый: При помощи условных системных операторов юКоз. А именно: при помощи оператора $ID$ - выводит номер равный ID материалу и арифметического оператора % выводящий целочисленный остаток от деления на число (результат всегда целочисленный).
Пример кода: Code <?if($ID$%6='0')?> <div class="advBox"> ...моя реклама... </div> <?endif?>
Код вставляется в шаблон Вид материалов и выводится если ID материала кратно 6 - то бишь остаток от деления на шесть == 0. Делитель - цифра шесть - естественно, можно изменить на свою.
Примеры исчислений: Quote (Info) Истинно ли данное условие: $ID$%6='0' При: ID == 6; 6/6=1,0 - после запятой ноль - остаток == 0. Равенство верно. --- При: ID == 36; 36/6==6,0 - после запятой ноль - остаток == 0. Равенство верно. --- При: ID == 32; 32/6≈5,3 - после запятой НЕ ноль - остаток ≠ 0. Равенство НЕ верно. При 32 остаток == 2. Почему? вспоминаем... Потому что, максимальное целое кратное шести число из 32 - это 30 (6*5==30) остаток будет == 2 (32-30==2).
Вот и весь принцип.
Если у вас материалы идут более-менее подряд, блок будет выводится каждый шестой материал. Числом можно ставить любое целое.
Так же, можно использовать информер случайных данных или ротатор банеров:
Пример кода: Code <?if($ID$%6='0')?> <div class="advBox"> <script type="text/javascript" src="http://ваш_сайт.ру/informer/2-1"></script> </div> <?endif?>
С этим способом, думаю, все понятно )
Способ второй (2-0): При помощи JavaScript. Простейший вариант:
Пример кода: Code <div id="advBox" style="display:none;"> ...моя реклама #1... </div> <script type="text/javascript"> $('#allEntries table.eBlock:eq(1)').after($('#advBox').css('display','block')); </script> Где: <div id="advBox" style="display:none;"> - Информационный блок скрываем при помощи стилей, и скриптом его добавляем после второго материала. table.eBlock:eq(1) - порядковый номер таблицы с классом eBlock, отсчет с нуля. Естественно, номер можно изменить.
Блок выведется после второго материала по счету (считать сверху).
Код добавляется в шаблон, в котором должен выводиться, после оператора $BODY$.
Важно:
Класс таблицы - eBlock - может, и скорее всего будет, не совпадать с классом вашей таблицы. Так что, скрипт редактируем под себя, а именно, открываем шаблон Вид материалов данного модуля, где будем применять, и ищем первый блок или таблицу с классом, если нет просто добавляем. Корректируем скрипт.
Например: Для каталога файлов, стандартный код вот такой: Code <table border="0" cellpadding="0" cellspacing="0" width="100%" class="eBlock"><tr><td style="padding:3px;"> <?if($MODER_PANEL$)?> ...и т.д... </div></td> </tr></table><br /> - с этим кодом все нормально, работать будет, так как есть таблица с классом eBlock
А вот для шаблона Game Crusade, для того же каталога, код вот такой: Code <div style="float:left; width:100%;"> <h4><b>[ </b><?if($CATEGORY_NAME$)?> <A href="$CATEGORY_URL$">$CATEGORY_NAME$</A><?endif?><b> ]</b> <i>»</i><span> <A href="$ENTRY_URL$">$TITLE$</A></span></h4> ...и т.д... <div class="sep1"></div> </div> - здесь работать не будет, так как нет ни таблицы, ни класса.
Что бы работало, нужно дополнить, а именно: Прописать класс верхнему блоку, и отредактировать скрипт.
Вот так - добавляем класс: Code <div class="eBlock" style="float:left; width:100%;"> <h4><b>[ </b><?if($CATEGORY_NAME$)?> <A href="$CATEGORY_URL$">$CATEGORY_NAME$</A><?endif?><b> ]</b> <i>»</i><span> <A href="$ENTRY_URL$">$TITLE$</A></span></h4> ...и т.д... <div class="sep1"></div> </div>
Редактируем скрипт: Code <script type="text/javascript"> $('#allEntries div.eBlock:eq(1)').after($('#advBox').css('display','block')); </script>
Вот теперь, все будет работать.
Способ второй (2-1): При помощи JavaScript. Вариант чуть посложнее, со случайной выборкой.
Пример кода: Code <div id="advBox" style="display:none;"> <div class="advCont">...моя реклама #1...</div> <div class="advCont">...моя реклама #2...</div> <div class="advCont">...моя реклама #3...</div> <div class="advCont">...моя реклама #4...</div> <div class="advCont">...моя реклама #5...</div> </div> <script type="text/javascript"> $('#allEntries table.eBlock:eq(1)').after($('#advBox div.advCont:eq('+Math.floor(Math.random()*5)+')').css('display','block')); </script> Где: $('#advBox div.advCont:eq('+Math.floor(Math.random()*5)+')') - случайная выборка из общего количества рекламных блоков. $('#allEntries table.eBlock:eq(1)') - после какого блока добавляем.
Все остальное - то же, что и в примере выше.
Скрипт выводит случайный блок рекламы после второго материала. Добавляется, так же, в шаблон, после оператора $BODY$.
Способ второй (2-2): При помощи JavaScript. Вариант с использованием информеров. Для вывода информации или рекламы, можно использовать информеры, например информер случайных данных, или любые другие.
Например: Code <script type="text/javascript"> $.get('http://ваш_сайт.ру/informer/2-1',function(d){ $('#allEntries table.eBlock:eq(1)').after($('<div id="advBox"/>').html(d.substring(16,d.length-3))); }); </script> Где: $.get('http://ваш_сайт.ру/informer/2-1',function(d){}); - ссылка на ваш информер. Обычно имеет вид: http://ваш_сайт.ру/informer/2-1.
Так же, добавляется в шаблон, после оператора $BODY$
Важно! Информеры можно использовать только свои, то бишь, со своего домена.
Способ второй (2-3): При помощи JavaScript. Случайная выборка из блоков с рекламой на отдельной странице, или из файла.
Для блоков с рекламной можно использовать отдельную страницу. Со станицы удобнее, потому что проще редактировать и добавлять информацию.
Для этого создается отдельная страница (в ПУ - редактор страниц) и в контент, через стандартную форму добавления, помещаются блоки с заданным классом (или id). Данную страницу (с блоками) желательно закрыть от индексации, делается это добавлением в хеад страницы (между тегами <head> и </head>) метатега robots или через файл robots.txt.
Метатег добавляется через условие: Code <title>$SITE_NAME$ - $MODULE_NAME$</title> <?if($URI_ID$='page4')?> <meta name="robots" content="noindex,nofollow" /> <?endif?> Где: <?if($URI_ID$='page4')?> - ID вашей страницы - можно узнать по адресу: http://ваш_сайт.ру/index/0-4 - последняя цифра после тире и есть ID страницы (для модуля index - страницы сайта).
Структура информационных блоков такая: Code <div class="advCont">...моя реклама #1...</div> <div class="advCont">...моя реклама #2...</div> <div class="advCont">...моя реклама #3...</div> <div class="advCont">...моя реклама #4...</div> <div class="advCont">...моя реклама #5...</div>
Ну и сам скрипт: Code <script type="text/javascript"> $.get('http://ваш_сайт.ру/index/0-8',function(d){ var o=$('div.advCont',d),i=Math.floor(Math.random()*o.length); $('#allEntries table.eBlock:eq(1)').after($('<div id="advBox"/>').html(o.eq(i))); }); </script> Где: $.get('http://ваш_сайт.ру/index/0-8',function(d){..}); - ссылка на вашу страницу, обычно имеет вид: http://ваш_сайт.ру/index/0-8. Где «8» - ID страницы. $('#allEntries table.eBlock:eq(1)') - после какого блока, от нуля, добавляется блок. i=Math.floor(Math.random()*o.length); - определяем случайное число, от общего количества блоков. o.eq(i) - делаем выборку блока по его индексу от случайного числа.
Добавляется, так же, в шаблон, после оператора $BODY$..)
Способ третий: комбинированный - и то и другое.
Ну а комбинировать можно как угодна, заменяя различный JS-функции операторами. Например, использовать системный оператор: - Возвращает случайное число от 0 до N-1, включительно. Где: N - целое число, от 0 до ... много.
А использовать можно так: Code <script type="text/javascript"> $.get('/_ext/2012/ads_news_posts/2-0.html',function(d){ var o=$('div.advCont',d),i=Math.floor(Math.random()*o.length); $('#allEntries table.eBlock:eq(<?rnd(11)?>)').after($('<div id="advBox"/>').html(o.eq(i))); }); </script> Где: $('#allEntries table.eBlock:eq(<?rnd(11)?>)') - количество материалов на странице + единица. Случайный блок с рекламой выведется после случайного блока новостей.
Конечно, это далеко не все способы, но принцип рассмотрен - дальше уже ваша фантазия ..
| | |
|
|
|
2012-10-06Дата: Суббота, 06.10.2012, 15:49 | Сообщение # 3 |
Генерал-майор
Группа: Пользователи
Статус: Offline
|
likbezz, у тебя там раза 4 написано способ второй , напиши так 2.1, 2.2, 2.3. И немного не понятно
добавляем после второго материала. порядковый номер таблицы с классом eBlock т.е. реклама будет идти через один материал или только после второго поста, или как? Добавлено (06.10.2012, 15:41) --------------------------------------------- И примеры лучше вылаживать не в конце, а после каждого способа соответствующий пример Добавлено (06.10.2012, 15:48) ---------------------------------------------
Для этого создается отдельная страница (в ПУ - редактор страниц) и в контент, через стандартную форуму добавления, помещаются блоки с заданным классом (или id). опечаткаДобавлено (06.10.2012, 15:49) ---------------------------------------------
делается это добавлением в хеад страницы Лучше напиши между <head> и </head> для особо одарённых )))
| | |
|
|
2012-10-06Дата: Суббота, 06.10.2012, 15:56 | Сообщение # 4 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
bandjuk, т.е. реклама будет идти через один материал или только после второго поста, или как? Только после второго, так как порядковый номер в дереве элементов таблиц идет как обычно, с нуля до последней) и второй материал встречается лишь однажды ) на страницу.. И примеры лучше вылаживать не в конце, а после каждого способа соответствующий пример Да это я вообще переписывал, на юкоз примеры низя.. конечно запихаю куда надо, на скорую руку делал - уходить уже надо было..
Ok)
Лучше напиши между <head> и </head> для особо одарённых ))) Ну, это да.
Ща поправлю )
| | |
|
|
2012-10-06Дата: Суббота, 06.10.2012, 16:11 | Сообщение # 5 |
Генерал-майор
Группа: Пользователи
Статус: Offline
|
Только после второго, так как порядковый номер в дереве элементов таблиц идет как обычно, с нуля до последней) и второй материал встречается лишь однажды ) на страницу.. нужно это как-то особо отметить, чтобы не было ни вопросов ни догадок! Так тупо и напиши - выводит только после второго материала. И опять же мне не понятно, а если материала с ИД 2 нет, или ИД роли не играет? Добавлено (06.10.2012, 16:11) --------------------------------------------- А вообще привязки к ИД нет, что-то я протупил, идёт отсчёт таблиц с данным классом, верно?
Сообщение отредактировал bandjuk - Суббота, 06.10.2012, 16:03 | | |
|
|
2012-10-06Дата: Суббота, 06.10.2012, 16:12 | Сообщение # 6 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
bandjuk, нужно это как-то особо отметить Ну как это отметить?)
Так тупо и напиши - выводит только после второго А там как написано?
И опять же мне не понятно, а если материала с ИД 2 нет, или ИД роли не играет? ?? Quote (Info) Истинно ли данное условие: $ID$%6='0' При: ID == 6; 6/6=1,0 - после запятой ноль - остаток == 0. Равенство верно. --- При: ID == 36; 36/6==6,0 - после запятой ноль - остаток == 0. Равенство верно. --- При: ID == 32; 32/6≈5,3 - после запятой НЕ ноль - остаток ≠ 0. Равенство НЕ верно. При 32 остаток == 2. Почему? вспоминаем... Потому что, максимальное целое кратное шести число из 32 - это 30 (6*5==30) остаток будет == 2 (32-30==2).
Истинно ли данное условие: $ID$%6='0' при ID == 2 ? и чему будет == остаток, если не равно? .. пошевелишь?
Все остальные способы к ID отношения не имеют, и нигде не написано обратное - там берется индекс элемента - порядковый номер в дереве.. Ну это просто. Зачем это уточнять? Карт в колоде сколько? - 36 или 52. Всегда есть и первая и вторая, их не не может не быть. И ими может быть быть любая ) - как ляжет ) - Первая верхняя, вторая - та что под ней ) даже если всего карт будет две) значит вторая будет одновременно и второй и последней)
отсчёт таблиц с данным классом, верно? Верно, по индексу. Первая таблица сверху будет иметь индекс - 0, вторая - единицу ... и тд. последняя будет иметь индекс == общее кол-во - 1 (так как отсчет с нуля)
| | |
|
|
2012-10-06Дата: Суббота, 06.10.2012, 16:16 | Сообщение # 7 |
Генерал-майор
Группа: Пользователи
Статус: Offline
|
likbezz, та я уже понял и даже написал это: А вообще привязки к ИД нет, что-то я протупил, идёт отсчёт таблиц с данным классом, верно? Где: <div id="advBox" style="display:none;"> - Информационный блок скрываем при помощи стилей, и скриптом его добавляем после второго материала. тут бы я дописал. Реклама выведется после второго материала.
| | |
|
|
2012-10-06Дата: Суббота, 06.10.2012, 16:22 | Сообщение # 8 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
bandjuk, тут бы я дописал. Реклама выведется после второго материала. Ну, блин .. если добавляем после второго) - то где она должна вылезти? - после третьего что ли?) Уговорил, дописал)
| | |
|
|
2012-10-06Дата: Суббота, 06.10.2012, 16:26 | Сообщение # 9 |
Генерал-майор
Группа: Пользователи
Статус: Offline
|
Ну, блин .. если добавляем после второго) не понятно написано, по крайней мере мне ну хуже то от этого точно не будет Добавлено (06.10.2012, 16:26) ---------------------------------------------
Если у вас материалы идут более-менее подряд, блок будет выводится каждый шестой материал. вот тут понятно, а там как-то не очень было
| | |
|
|
2013-01-11Дата: Пятница, 11.01.2013, 04:41 | Сообщение # 10 |
Генерал-майор
Группа: Проверенные
Статус: Offline
|
Код <?if(substr($NUMBER$,-5,1) = 1)?>содержимое<?else?><?endif?>
я организовал по номеру поста = 1
с увеличением регистров числа нужно и количество символов увеличить
пример в пост 21 --- Код <?if(substr($NUMBER$,-5,2) = 21)?>содержимое<?else?><?endif?>
Сообщение отредактировал true - Пятница, 11.01.2013, 05:12 | | |
|
|
2013-01-11Дата: Пятница, 11.01.2013, 09:50 | Сообщение # 11 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
true, с увеличением регистров числа нужно и количество символов увеличить пример в пост 21 --- Это ты про форум? про посты? Не проще ли взять номер поста и вычислить какой он по счету, исходя из кол-ва постов на странице? Это что ж, мне в 10-страничной теме где постов за 200 прописывать столько условий?) Да ты что) Или тогда уж скриптом...
| | |
|
|
2013-01-12Дата: Суббота, 12.01.2013, 01:20 | Сообщение # 12 |
Генерал-майор
Группа: Проверенные
Статус: Offline
|
Цитата Это ты про форум? про посты? Не проще ли взять номер поста и вычислить какой он по счету, исходя из кол-ва постов на странице? Это что ж, мне в 10-страничной теме где постов за 200 прописывать столько условий?) Да ты что) Или тогда уж скриптом...
я ожидал этой реакции ))) вот смотри,дана базовая формула <?if(substr($NUMBER$,-5,1) = 1)?> так же мы знаем ,что материалы в пределах сайта считаются глобально (то есть в одной теме порядковые номера постов ,которые друг за другом привязаны только к дате добавления относительно всего сайта к примеру пост 1 поставленный год назад имеет номер 9567 ,а пост 2 идущий за ним и выставленный сегодня имеет номер 11578, а в пределах страницы это всего лишь посты 1 и 2,числа меньше=считать легче)
так же мы знаем ,что порядковый номер материала (глобальный,стоит в имени ссылки) и сколько постов выводит движок на странице, получается,что наиболее эффективный код (скрипт) лучше сделать из этой конструкции (это же всего лишь живой пример с моего сайта,чисто под него)
то есть скриптом брать порядковые номера постов в пределах темы и привязывать вывод рекламы формулой считающей относительно вывода постов на странице числа будут всегда кратные одному числу
к примеру вывожу 3 блока рекламы в посте 1 - 3 -5 и так на всех страницах
это сама идея,реализаций множество,я выбрал системный скрипт только из-за специфики сайта,,,хотя ничего не утверждаю однозначно )))Добавлено (12.01.2013, 01:20) --------------------------------------------- так же выбрал подобное решение,потому-что мне нужно было,чтобы 1 пост был уникальным с выводом эмулятора,а в последующие юзеры уже смогли добавлять свои комментарии,я меняю всю форму вида матералов
| | |
|
|
2013-01-12Дата: Суббота, 12.01.2013, 13:54 | Сообщение # 13 |
Аццкий кодер
Группа: Администраторы
Статус: Unknown
|
true, к примеру вывожу 3 блока рекламы в посте 1 - 3 -5 и так на всех страницах Ну, если выводишь - тогда нет вопросов)
| | |
|