Показать полную графическую версию : скрипт показывающий баннер на определенной странице
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
и тут встает главный вопрос :) как этот скрипт написать если в яваскрипте ни бум-бум :)
спасите, помогите :)
ну можно что нить в этом духе, жаль потестироват не могу. Где алерты надо поменять на вставку банера
<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>
<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"); вместо раздел=админ?
если вам не нужно детальное выделение параметров, то у 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, честно говоря я с удовольствием разобрался бы в обоих вариантах чисто для себя :)
я воткнул ваш код прямо в место где по идее должен быть баннер »
По идее, он должен вызываться после определения слоя, в который будет вставлен баннер. Ладно, ниже напишу подробнее.
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> использовать.
поставте этот скрипт внизу страницы, потому как елемент еще не загружен. Или поместите в функцию и свяжите с window.onload в хедере
window.onload = ваша_функция;
При таком подходе баннер будет загружаться после полной загрузки страницы. Вот ещё решение (не проверял - т.к. лениво :)):
<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,
а можно ваш метод тоже в подробном виде как у Коутти? с описанием построчным и кодом? :)
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.