Войти

Показать полную графическую версию : скрипт показывающий баннер на определенной странице


koresaram
28-05-2008, 14:06
всем привет.
нужна помощь зала :)
дано: имеется форум YaBB2.1 в котором есть единый шаблон хтмл оформления в формате html.
задача: нужно повесить баннер (флешевую растяжку) но только в один раздел форума.

собственно я не придумал ничего лучше чем поставить яваскрипт в шаблон форума который бы определял в каком разделе находится пользователь и, если это нужный раздел, то показывал бы баннер. а в других разделах соответственно - не показывал.
разделы форума делятся по их названиям в строке эксплорера. то есть есть раздел www.сайт.ru/forum/YaBB.cgi?board=admin и все темы в этом разделе идут как www.сайт.ru/forum/YaBB.cgi?board=admin;num=1193739447

и тут встает главный вопрос :) как этот скрипт написать если в яваскрипте ни бум-бум :)

спасите, помогите :)

bruder
28-05-2008, 16:14
ну можно что нить в этом духе, жаль потестироват не могу. Где алерты надо поменять на вставку банера

<html><head>
<script type="text/javascript">
var params=document.URL.split("?")[1];
var part = '';
if (params != null ) {
try {
var part=params.split(";")[0].split("=")[1];
} catch (e) {}
}

switch (part) {
case "admin" :
alert("раздел = admin");
break;
default:
alert("неизвестный раздел");
}
</script>
</head><body></body></html>

Coutty
28-05-2008, 16:17
<script>
if (document.location.search.indexOf('board=admin') != -1)
{
document.getElementById('placeForBanner').innerHTML = "Тут HTML-код для вставки баннера";
}
</script>


Разъясняю вкратце:
document.location - значение, написанное в адресной строке
document.location.search - то, что в адресе после знака "?" (включая сам вопросительный знак)
строка.indexOf('подстрока') - возвращает вхождение 'подстроки' в строку. Если строка не найдена, возвращает -1.
Т.е. мы проверяем, если в адресе после знака "?" есть строка 'board=admin', то в элемент <div id="placeForBanner"></div> вставляем соответствующий код баннера. Соответственно, там, где строки нет, баннер вставлять не надо.

Насчёт вставки скрипта в нужное место - сами разберётесь?:)

koresaram
28-05-2008, 17:13
Coutty,
думал что разберусь но не тут то было :)
я воткнул ваш код прямо в место где по идее должен быть баннер

пробовал на гифе. я так понял нет разницы какой код хтмл будет вызываться.

<script>
if (document.location.search.indexOf('board=admin') != -1)
{
document.getElementById('placeForBanner').innerHTML = "<img src="http://www.сайт.ru/banners/468_60_rus2.gif">";
}
</script>
в итоге баннера нет. но есть предупреждение:

строка 34
символ 68
"предполагается наличие ";""
код 0


в 34 строке в хтмл странице следующее:
document.getElementById('placeForBanner').innerHTML = "<img src="http://www.logist.ru/banners/468_60_rus2.gif">";

********************

bruder,
сори я не понял куда вставлять код баннера :( точнее вместо чего.
alert("раздел = admin"); вместо раздел=админ?

bruder
28-05-2008, 17:43
если вам не нужно детальное выделение параметров, то у Coutty конечно решение короче им и воспользуйтесь.

placeForBanner это id вашего елемента в котором будет находится баннер

koresaram
28-05-2008, 17:45
опробовал вариант такой:
<script>
if (document.location.search.indexOf('board=admin') != -1)
{
document.getElementById('placeForBanner').innerHTML = "<img src="http://www.сайт.ru/banners/468_60_rus2.gif">";
}
</script>
скрипт поставил в хеад
а в боди поставил
<div id="placeForBanner"></div>

итог тот же но ошибка другая:
строка 30
символ 3
document.getElementById(...) есть нулл или не является объектом
код 0

bruder, честно говоря я с удовольствием разобрался бы в обоих вариантах чисто для себя :)

Coutty
28-05-2008, 18:04
я воткнул ваш код прямо в место где по идее должен быть баннер »
По идее, он должен вызываться после определения слоя, в который будет вставлен баннер. Ладно, ниже напишу подробнее.
document.getElementById('placeForBanner').innerHTML = "<img src="http://www.сайт.ru/banners/468_60_rus2.gif">";»
Очевидно, что ошибка заключается в использовании двойных кавычек внутри двойных. Нужно либо так:
document.getElementById('placeForBanner').innerHTML = '<img src="http://www.сайт.ru/banners/468_60_rus2.gif">';
Либо так:
document.getElementById('placeForBanner').innerHTML = "<img src='http://www.сайт.ru/banners/468_60_rus2.gif'>";
Либо так:
document.getElementById('placeForBanner').innerHTML = "<img src=\"http://www.сайт.ru/banners/468_60_rus2.gif\">";
Либо иным способом :lol:

итог тот же но ошибка другая:
строка 30
символ 3
document.getElementById(...) есть нулл или не является объектом
код 0 »
Потому что код вызывается до того, как создан объект с соответствующим именем. Его нужно вставлять либо после "слоя", либо по событию onload для страницы. Второй вариант мне нравится больше, потому что я не люблю разбрасывать скрипты по всему телу документа. Вот он:

<html>
<head>
<title>Опупенная страница!</title>
<script>
function getBanner() {
if (document.location.search.indexOf('board=admin') != -1)
{
document.getElementById('placeForBanner').innerHTML = "<img src='http://www.сайт.ru/banners/468_60_rus2.gif'>";
}
}
</script>
</head>
<body onload="getBanner();">
Много разного html...
<div id="placeForBanner"><!-- сюда будет вставлен баннер --></div>
И ещё много разного html...
</body>
</html>


Вместо div'а, видимо, можно и <p> использовать.

bruder
28-05-2008, 18:07
поставте этот скрипт внизу страницы, потому как елемент еще не загружен. Или поместите в функцию и свяжите с window.onload в хедере

window.onload = ваша_функция;

Coutty
28-05-2008, 18:17
При таком подходе баннер будет загружаться после полной загрузки страницы. Вот ещё решение (не проверял - т.к. лениво :)):

<html>
<head>
<title>Опупенная страница!</title>
</head>
<body>
Много разного html...
<div>
<script>
if (document.location.search.indexOf('board=admin') != -1)
{
document.write("<img src='http://www.сайт.ru/banners/468_60_rus2.gif'>");
}
</script>
</div>
Ещё много html...
</body>
</html>

По идее, document.write вписывает то, что надо в то место, где он используется. Но синтаксис не припомню - то ли document.write("текст"), то ли document.write = "текст"...

Соответственно, здесь баннер начинает загружаться сразу после того, как загрузился скрипт.

koresaram
28-05-2008, 18:34
Coutty, про двойные кавычки и обратный слеш я думал(имеется мизерный опыт в перле :) но их замена ничего не давала :)) дело было в очереди загрузки :) и все заработало :) спасибо!

дополнительный вопрос: а если надо будет чтобы баннер показывался в трех разделах из 10? тогда как быть? добавить в условие через точку с запятой боард=клуб и т.д. или как?

bruder,
а можно ваш метод тоже в подробном виде как у Коутти? с описанием построчным и кодом? :)

Coutty
28-05-2008, 18:56
var a = document.location.search; // для краткости заносим в переменную a
if (a.indexOf('board=admin') != -1 || a.indexOf('board=siski') != -1 || a.indexOf('board=club') != -1)
{
document.getElementById('placeForBanner').innerHTML = "<img src='http://www.сайт.ru/banners/468_60_rus2.gif'>";
}
|| - условие "или".
Фигурные скобки после if можно не ставить, потому что одно действие выполняется, но и не повредят они))

А вот если надо делать в двадцати разделах из ста, то способ уже будет другой. Например:

var a = document.location.search; // для краткости
var withBanners = ['admin', 'siski', 'club', 'music', 'program', 'autos', 'graphics', 'money', 'books', 'radio']; // в массиве перечисляем разделы, в которые хотим вставить баннер
for (var i = 0; i < withBanners.length; i++) // обходим все значения массива. Можно применить for each, но я стесняюсь :) просто такой способ привычнее
{
if (a.indexOf('board=' + withBanners[i]) != -1) // и ищем строку board=значение_из_массива в адресе
{
document.getElementById('placeForBanner').innerHTML = "<img src='http://www.сайт.ru/banners/468_60_rus2.gif'>";
}
}

Опять же, тут можно опустить все фигурные скобки, но я оставил их для лучшего понимания :)

Не Коутти, а Котти! =^_^=

koresaram
28-05-2008, 18:59
еще раз спасибо Котти :)

koresaram
11-04-2009, 11:50
всем привет. это опять я и вот по какому вопросу :)
требуется немного усложнить скрипт. исходные данные те же самые. форум и необходимость подмены картинки в зависимости от раздела. но в этот раз дело осложняется бекграундом. вот такой у нас кусок кода:



<td background="/styles/subsilver2/imageset/1_02.gif"><a href="http://www.сайт.ru/index.html">
<script>
if (document.location.search.indexOf('f=12') != -1)
{
document.write("<img src='/styles/subsilver2/imageset/site_logo1.gif'>");
}
else {document.write("<img src='/styles/subsilver2/imageset/site_logo.gif'>");
}
</script>
</a></td>
<td width="100%" align="center" background="/styles/subsilver2/imageset/1_02.gif"><h1>{SITENAME}</h1><span class="gen">{SITE_DESCRIPTION}</span></td>


тут я по аналогии с первым вопросом использовал скрипт для замены картинки и он работает, но проблема с бекграундом. в него засунуть такой скрипт у меня не получилось. что делать в таком случае?

у меня возникла опять же мысль, что надо как-то заранее определять наборы изображений для определенной ветки и в код картинки вставлять эти изображения. то есть скрипт проверяет наличие набора букв в строке браузера и если там есть например f=12 то он дает ссылки на эти картинки в общем виде. не знаю как объяснить, но вот типа так:
код естественно не рабочий :)

<script>
if (document.location.search.indexOf('f=12') != -1)
{
$LOGOSITE=www.mysite.ru/site_logo.gif; $BACKGROUND=www.mysite.ru/background.gif
}
тут еще несколько условий на f=6 f=8 и т.д. ну по разделам для f=6 пара картинок будет например $LOGOSITE=www.mysite.ru/site_logo6.gif; $BACKGROUND=www.mysite.ru/background6.gif
</script>

а дальше в код страницы подсовывается эта пара
<td background="$BACKGROUND"><img src="$LOGOSITE"><a href="http://www.сайт.ru/index.html">

</a></td>



вот такие идеи :) исполнение как обычно на нуле :) хелп :)




© OSzone.net 2001-2012