webew
Войти » Регистрация
 
JavaScript

Динамическое изменение стиля

21 августа 2008, 15:43
Автор: Jony
Добрый день!
Возможно ли, чтобы для жителей моего города, столбец приобретал бы св-ва другого класса или хотя бы поменял background? Может можно сделать это так: есть да файла сss, где описаны св-ва этого столбца. При проверке города: если город не мой, то берем один файл, если мой - другой.

Проверку мог бы делать java-скрипт, который при необходимости пожно спрятать от роботов.

И как бы сделать так, чтобы это не проверялось на каждой посещаемой странице сайта (т.е. для каждого посетителя при каждом заходе только раз проверяется), на тот случай если проверка проходит не быстро.

Может есть вариант проще?

Очень интересен (и нужен) ответ.
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
NO USERPIC

rgbeast

Можно css-ку формировать с помощью PHP. PHP будет проверять город и в зависимости от этого выдавать тот или иной стиль. Роботы серверную часть не увидят никода, да им немного дела до css. Я имею в виду такое решение:

<link rel="stylesheet" type="text/css" href="/mycss.php" />


Если проверка происходит долго, записывайте город в переменную сессии в PHP.
21.08.2008, 15:51
Ответить
NO USERPIC

Jony

Я к сожалению кроме того что написал - больше ничего не знаю о том как это сделать. с пхп не знаком. т.е. Ваш ответ сказал мне только о том, что это возможно....
21.08.2008, 16:06
Ответить
NO USERPIC

rgbeast

Если знаете Javascript, то можете использовать специальный скрипт для определения города и затем на основании города менять стиль. http://www.maxmind.com/app/javascript_city
21.08.2008, 16:21
Ответить

bur

Есть у меня в запасниках JavaScript-функция, которая может добавлять стили в CSS по селектору, вот её код:

function replaceStyle(id, selector, styleRule) {
    var styleNode = document.getElementById(id);
    if (!styleNode) {
        document.getElementById(id).parentNode.removeChild(document.getElementById(id));
        styleNode = document.createElement("STYLE");
        styleNode.id  = id;
        styleNode.type = "text/css";
        document.body.appendChild(styleNode);
    }
    styleRuleAll = selector + "{"+styleRule+"}";
    if (document.styleSheets) {
        if (document.styleSheets[0].addRule) {//IE
            document.styleSheets[0].addRule(selector, styleRule);
        } else if (document.styleSheets[0].insertRule) {
            document.styleSheets[0].insertRule(styleRuleAll, document.styleSheets[0].cssRules.length);
        }
    }
    else {//Opera
        var rule = document.createTextNode(styleRuleAll);
        styleNode.appendChild(styleRule);
    }
}


Например, вам для селектора td.firstcolumn нужно поставить стиль width:100px, делается это так:

replaceStyle('', 'td.firstcolumn', 'width:100px');


Можно конечно и динамически CSS-файлы подключать, но такой подход, имхо, менее затратный.

P.S.: Давно эту ф-ию не тестировал, если будут проблемы - пишите.
P.P.S.: В качестве первого аргумента можно передать идентификатор тега style, если такой имеется на странице.
21.08.2008, 16:19
Ответить
NO USERPIC

Jony

Спасибо за отклики. Но я совершенно не знаю web-программирования.
Может поэтому подход от Bur мне не совсем понятен.
Поэтому всё что написано - реализовать не смогу ( без подробых инструкций.

Наверное понятно, что нужно мне всё это для Sape.
А может вообще отключить код Сапы для города?
Будут ли тогда продаваться ссылки и не выкинут ли тогда сайт оттуда?

21.08.2008, 17:44
Ответить
NO USERPIC

rgbeast

Чтобы нарушить правила их надо хорошо знать и владеть инструментарием. Какие-то знания веб-программирования Вам все равно потребуются, чтобы задать конкретные вопросы. Если объединить мой ответ (для определения города) и ответ Александра (для смены стиля), то можно составить скрипт.
21.08.2008, 17:59
Ответить
NO USERPIC

Jony

//то можно составить скрипт// Я понимаю, что задача почти решена....
// Какие-то знания веб-программирования Вам все равно потребуются //Но готовый скрипт у меня хорошо получается вставить без знаний веб-программирования! :)
Сайты на CMS создают без знаний прогр-я, а иногда и без знаний html!
[мне известны лишь языки прогр-я (типа си и паскаля), но это не то, что нужно]
И по моему вопрос сформулирован достаточно точно.
Скажите тогда сколько может стоить (Можно на e-mal):
Изменить класс (class или id) столбца, если город - мой.
С описанием.

Или может сделаете такой пост?.....
21.08.2008, 21:47
Ответить

bur

Jony, приведите пример своей таблицы (интересует сколько ячеек в строке) и я вам набросаю такой скрипт бесплатно.

Еще напишите какую именно манипуляцию нужно сделать. Например, "необходимо у всех ячеек третьего столбца заменить класс first на класс second".
22.08.2008, 11:40
Ответить
NO USERPIC

Jony

Bur, у меня в "подвале" для рекламы и счетчиков вот такая таблица:

<table >
<tr >
<td class=banner><a href...>счетчики и т.п.</a></td>
<td class=banner><a href...>счетчики и т.п.</a></td>
....
<td class=banner><a href...>счетчики и т.п.</a></td> (10 столбцов)
</tr>
<tr>
<!-- for reclama -->
<td class=first colspan="10"> //класс этого столбца нужно изменить на "second"//
код биржи
</td>
</tr>
</table>

Но, если это упростит задачу, то можно в слобец второй строки вставить ещё таблицу, в которой нужно будет измнять св-ва первой строки первого столбца.

Цитата:
Например, "необходимо у всех ячеек третьего столбца заменить класс first на класс second"
. в общем одна строка, один столбец.
город: Томск.
[ мой e-mail: inamorato@yandex.ru ]
22.08.2008, 20:28
Ответить

bur

Сменить имя класса на единственной ячейки, это довольно простая задача.
Вот не самый красивый, но зато надежный способ.
Повесь на эту ячейку идентификатор, например такой: <td id="cell_id" class="first" colspan="10">.
Затем, сразу после таблицы размести на странице такой код:

<script type="text/javascript">document.getElementById("script_id").className = "second";</script>


Собственно всё :-)
Только я не совсем понял по какому событию должна происходить смена имени класса. По клику на что-то?
25.08.2008, 12:05
Ответить
NO USERPIC

rgbeast

Как я понял, автору требуется изменять имя класса на странице сразу, но только для посетителей из одного города. Для определения города по IP можно использовать базу http://webew.ru/posts/1087.webew#1091
25.08.2008, 18:25
Ответить
NO USERPIC

Jony

rgbeast, Да. Чтобы жители города не видели продажные ссылки.
//Для определения города по IP можно использовать// но как это сюда приложить, какую переменную куда и от какой функции ставить?.

Я в этом пОлный чайник......
25.08.2008, 21:50
Ответить
NO USERPIC

rgbeast

<script type="text/javascript" src="http://j.maxmind.com/app/geoip.js"></script>
<script type="text/javascript">
if(geoip_city() == "Tomsk") {
  document.getElementById("script_id").className = "second";
}
</script>
26.08.2008, 13:16
Ответить
NO USERPIC

Jony

А эта функция нужна? :
*** function replaceStyle(id, selector, styleRule) {
var styleNode = document.getElementById(id);
........

*** В этом месте : <td id="cell_id" class="first" colspan="10">
cell_id или script_id ? Обязательно назвать слово_id?

*** и вносить это в лист стилей или нет?
26.08.2008, 14:01
Ответить
NO USERPIC

rgbeast

М моем примере, эта функция не используется. В стилях должен быть класс "second"
26.08.2008, 14:16
Ответить
NO USERPIC

Jony

Я что то не могу понять, откуда тогда "скрип узнает", что менять класс нужно именно в этом столбце, а ни в к/л другом?
26.08.2008, 14:26
Ответить

bur

Судя по предыдущим комментам, класс нужно менять не на столбце, а на ячейке.
Что и делает код, приводимый rgbeast.
Нужно на ячейку повесить id="script_id", подключить js-файл с geoip и разместить код скрипта ниже таблицы на странице.
26.08.2008, 15:08
Ответить
NO USERPIC

Jony

bur, тогда понятно (!) Будем делать.
26.08.2008, 15:14
Ответить
NO USERPIC

Jony

Сработало, УРА!!! :)

Любопытно, почему скрипт срабатывает, когда его вносишь после таблицы, а если До, то не работает. Ведь некоторые скрипты подключают в начале страницы.

Однако, если у вас есть скрипт (без MySQL) для опред. города - чтобы не использовать сторонние сервисы, то прошу выслать.
Дело в том, что если польз-ли инета в нашем городе отключают внешний инет, то то, что находится не на томских серверах - недоступно. А мой сайт висит на томском сервере.

Бывшие жители нашего города говорят, что такого маразма нигде нет...

27.08.2008, 10:49
Ответить
NO USERPIC

rgbeast

Если скрипт внесен до таблицы, то таблица еще не загружена и изменить ее скрипт не может. Про скрипт без внешнего сервиса и без MySQL не знаю.
27.08.2008, 11:05
Ответить
NO USERPIC

Jony

и опять вопрос:

Как этот код
<script type="text/javascript" src="http://j.maxmind.com/app/geoip.js"></script>
<script type="text/javascript">
if(geoip_city() == "Tomsk") {
document.getElementById("script_id").className = "second";
}

записать в файл стилей на php, как вначале и было предложено.

Просто получается, что ссылки в моем городе сначала появляются, потом исчезают.
А в css это бы всё описывалось заранее (надеюсь).
-------------------------------------------------------------
Предполагаю что это что то вроде этого (меняем св-ва класса reclama) :
<?php
echo' .reclama { color: #000; }'; // по умолчанию
echo' <script type="text/javascript" src="http://j.maxmind.com/app/geoip.js"></script>';
if (geoip_region() == "75")
{echo '.reclama { color: #fff;}';} // если Томск

Орфографии php не знаю, поправьте, плиз.
27.08.2008, 16:35
Ответить
NO USERPIC

rgbeast

Javascript нельзя записать в файл стилей и нет смысле помещать в PHP. Предложено было использовать PHP/MySQL чтобы определять город и затем выдавать или не выдавать код со ссылками.
27.08.2008, 17:37
Ответить
NO USERPIC

Jony

Понятно.
Оставляю так.
28.08.2008, 12:06
Ответить
NO USERPIC

Jony

Здравствуйте.

У меня к вам еще вопрос.

Возможно ли в принципе создать скрипт, чтобы при нажатии на обычную ссылку (на страницу этого же сайта) вместо url этой ссылки, скрипт подставлял url какой нибудь ссылки из рекламного блока, ну и открывал бы эту рекламную страницу под всеми окнами?
Если можно, то жел-но чтобы в скрипте можно было указывать: число: для каждого 5-го (указать свое число) посетителя чтобы это "действо" происходило и чтобы в рекламном блоке "брался" всегда разный номер позиции.

----
предыд. скрипт работает. Всё отлично )
12.09.2008, 13:41
Ответить
NO USERPIC

rgbeast

Не совсем понятно, что значит открыть рекламную страницу "под всеми окнами". Такое поведение, вероятно, возможно, но оно противоречит принципам юзабилити - пользователь получит неожиданный для себя результат. Цель webew - совершенствовать сеть, поэтому мы стремимся к тому, чтобы
а) посетители могли продвигаться в изучении веб-технологий
б) посетители находили готовые полезные решения и делились практикой друг с другом

Ваш вопрос не связан с изучением языка Javascript, а предложенный скрипт не приводит к совершенствованию сети, напротив, такой скрипт ведет к негативной практике тихого подсовывания рекламы (что противоречит не только юзабилити, но и правилам большинства рекламных систем).
12.09.2008, 14:40
Ответить
NO USERPIC

Jony

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

Есть виды рекламы, кот. web-настравает сам и рекламный баннер открывается на страницах посетителя (под всеми окнами, вроде). Т.е. хожу я в по сайтам, потом если все окна закрываю по одному - то вижу - вот откуда то рекламная страница. Есть такая штука в link.ru .

Цитата:
юзабилити - пользователь получит неожиданный для себя результат

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

А применять это надо на сайтах по форексу - не много они потеряют....
А реклама "форексного" способа заработка - это обман.
12.09.2008, 18:15
Ответить
NO USERPIC

rgbeast

Всплывающие окна и размещение под - должно зависеть от браузера, никогда не задавался таким вопросом. Если знаете сайт, где это есть, просто скопируйте оттуда.

Цитата:
А применять это надо на сайтах по форексу - не много они потеряют....
А реклама "форексного" способа заработка - это обман.


Получается "эспроприация экспроприаторов", обманную рекламу обманом запихиваем так, чтоб пользователь не увидел и таким дважды обманным путем зарабатываем деньги. Скользкий путь достаточно.
12.09.2008, 18:37
Ответить
Добавить комментарий
Отображение комментариев: Древовидное | Плоское
© 2008—2017 webew.ru, связаться: x собака webew.ru
Сайт использует Flede и соответствует стандартам WAI-WCAG 1.0 на уровне A.
Rambler's Top100

Реклама: