ОсновноеRadiotalkПользовательское
Программирование
6   •   Посмотреть все темы

Replace

 

6703
Андрей @ZloVeЩиЙ
Ребята, помогите найти скрипт (или может кто для себя писал) для замены слов с одного на другое при полной загрузке страницы...
Идеально было бы указать ID где будем менять и конструкцию примерно такого вида:

что менять : на что менять
огурец : помидор,
яблоко : ананас,
...

20089
Dimitry @Dimitry
$a=array();
$a['огурец']='помидор';
$a['ананас']='яблоко';

$html=str_replace(array_keys($a),$a,$html);

как то так
тьфу... яваскрипт, вот)

var a=[];
a['огурец']='помидор';
a['ананас']='яблоко';

var html='тест огурец и ананас';
for (k in a) {html=html.replace(new RegExp(k, 'g'),a[k]);}

но не тестил

6703
Андрей @ZloVeЩиЙ
Dimitry, можно пример использования?

Пробовал так (содержимое файла index.php):
<?php get_header(); ?>
Фая
<?php
$a=array();
$a['Фая']='Фая2';
$a['ананас']='яблоко';
$html=str_replace(array_keys($a),$a,$html);
?>
<?php get_footer(); ?>

Открыл страницу - ничего не поменялось!

На JS все работает, но не так как надо ибо не заменяет, а добавляет еще и новый вариант...
<div id="inc">
огурец и ананас
</div>
<script>
var a=[];
a['огурец']='помидор';
a['ананас']='яблоко';
var html=document.getElementById('inc').innerHTML;
for (k in a) {html=html.replace(new RegExp(k, 'g'),a[k]);}
document.write(html);
</script>

Отредактировано ZloVeЩиЙ - 08.07.2013
8497
Степан @Trilby
ZloVeЩиЙ, либо php, либо js...

В JS у тебя одна строчка не правильная... Надо не печатать, а обновлять содержание блока inc.

<div id="inc">
огурец и ананас
</div>
<script>
var a=[];
a['огурец']='помидор';
a['ананас']='яблоко';
var html=document.getElementById('inc').innerHTML;
for (k in a) {html=html.replace(new RegExp(k, 'g'),a[k]);}
document.getElementById('inc').innerHTML = html;
</script>

Пример: **********

Отредактировано Trilby - 08.07.2013
6703
Андрей @ZloVeЩиЙ
На JS вариант работает и вроде бы устраивает, но как быть с теми элементами которые сами вставляются в код подобным методом (например тем же InerHtml).
Грубо говоря есть jquery библиотека, подключаем её, прописываем:
<script type="text/javascript">
$(document).ready(function () {
$('#include').weatherfeed(['RSXX0167'], {
forecast: true
});
});
</script>
<div id="include"></div>

В итоге получаем погоду на сайт, которую можно настроить как душе угодно... смотрим html
<div id="include"></div> - пустой.
Смотрим через разработчика:

Видно что внутри нашего блока появилось еще "пачка" каждый за что-то отвечает...
Но вот как поменять их содержимое?

p.s. Смотрел сам файл, думал внутри смогу поменять, но там тоже все как - то хитро устроено, насколько я понял - идет парсер (на Json) переменных и прочих значений!

Отредактировано ZloVeЩиЙ - 08.07.2013
2615
Сергей @Pegass
ZloVeЩиЙ, JS берёт из DOM т.е. то что режиме разработчика, вопрос в том как запустить нужный скрипт только тогда, когда содержимое станет заполнено
ИМХО проще скрипт переписать, чем мастерить костыли)))

Отредактировано Pegass - 08.07.2013
6703
Андрей @ZloVeЩиЙ
Не думаю что в моем случае будет проще переписать...
Скрипт парсит инфу с забугорного yahoo, все что мне нужно - заменить Mon-Sun на Понедельник-Воскресенье, аналогично с месяцами.
Да и если
берёт из DOM т.е. то что режиме разработчика

тогда почему не происходит замена?
или ты "прощелекал" не дописать (:

2615
Сергей @Pegass
ZloVeЩиЙ пишет:

Не думаю что в моем случае будет проще переписать...
Скрипт парсит инфу с забугорного yahoo, все что мне нужно - заменить Mon-Sun на Понедельник-Воскресенье, аналогично с месяцами.
Да и если
берёт из DOM т.е. то что режиме разработчика

тогда почему не происходит замена?
или ты "прощелекал" не дописать (:

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

2615
Сергей @Pegass
ZloVeЩиЙ пишет:

все что мне нужно - заменить Mon-Sun на Понедельник-Воскресенье, аналогично с месяцами.

И всего то, дай ка мне список что на что менять, всм как оно написано сейчас и как должно быть)))

UP
перевод блоков weatherDesc, weatherForecastText и weatherCity пихать в массив t[]
**********

Отредактировано Pegass - 08.07.2013
6703
Андрей @ZloVeЩиЙ
Вот только по твоему методу не все поменять получается, например a[g].text
Хотя я и делал все по аналогии:
1. создал масив
var t2=new Array();t2['Showers Early']='Ранние дожди';t2['Partly Cloudy']='Переменная облачность';t2['Mostly Sunny']='Солнечно';

2. поменял a[g].text на w_rus(a[g].text,true) но так ничего и не поменялось 🙁

8497
Степан @Trilby
Вообще, когда такое пишут, то как минимум копируют ошибки из консоли (ctrl+shift+j), а как максимум — дают ссылку на страницу с примером...

Если функция выполняется при загрузке страницы (а не при вызове пользователем), то косяк в том, что данные в <div id="include"></div> просто не успевают загружаться.
Я этого говна нахлебался, когда писал первые запросы на AJAX.

Лечил я примерно так:
Внутри $(document).ready, в самом низу (вообще, любые подобные коды пиши в document ready)
function TrilbyWasHereIfERROR(){
try {
a[g].text = w_rus(a[g].text,true);
} catch(e) {
setTimeout(TrilbyWasHereIfERROR, 300);
}
}

function TrilbyWasHere(){
try {
a[g].text = w_rus(a[g].text,true);
} catch(e) {
setTimeout(TrilbyWasHereIfERROR, 300);
}
}TrilbyWasHere();

Не помню, почему писал именно 2 функции, но в одну меня и не работало (хотя, может быть из-за того, что я это делал в Prototype)...
Если заработает такой вариант, то на здоровье.

function TrilbyWasHere(){
try {
a[g].text = w_rus(a[g].text,true);
} catch(e) {
setTimeout(TrilbyWasHere, 300);
}
}TrilbyWasHere();

Суть в том, что одновременно выполняется скрипт, заполняющий блок и твой код. Если первый не успел выполниться (а так бывает, в принципе, всегда), то второй ничего не может сделать и выдает ошибку. Мы ловим ошибку, и через 300 мс пробуем еще раз. И так пока не получится

Отредактировано Trilby - 09.07.2013
6703
Андрей @ZloVeЩиЙ
Ничего не приводил в примеры, потому как ответа от !Pegass не ожидалось, а делал все по аналогии к тому, что он мне скинул выше...
Сегодня уже не буду ковырять это все дело, а завтра гляну и твой пример, кстати за него спасибо отдельное!

2615
Сергей @Pegass
ZloVeЩиЙ пишет:

Вот только по твоему методу не все поменять получается, например a[g].text
Хотя я и делал все по аналогии:
1. создал масив
var t2=new Array();t2['Showers Early']='Ранние дожди';t2['Partly Cloudy']='Переменная облачность';t2['Mostly Sunny']='Солнечно';

2. поменял a[g].text на w_rus(a[g].text,true) но так ничего и не поменялось 🙁

РРР нафига ж ты создал массив t2[] пихай всё в массив t[]

6703
Андрей @ZloVeЩиЙ
Как нафига? Ты ж тоже создал t1 для месяцев, а в t у тебя дни.. или я чего то не догоняю!?
Пытался после Воскресенья добавить:
t['Sun']='Воскресенье';t['Mostly Sunny']='Солнечно';
собственно ничего (:
Я конечно менял кое-чего под себя, но вроде как ничего жизненно важного не задел ибо все работает да и ошибок нет...
**********

Отредактировано ZloVeЩиЙ - 09.07.2013
2615
Сергей @Pegass
ZloVeЩиЙ, t1 я создал потому что там надо не целиком заменять(можно было всё так сделать, но я решил перестраховаться)))))
А вот исправлять надо аккуратнее))))
Получите и распишитесь
**********

6703
Андрей @ZloVeЩиЙ
Значит все таки я упустил что-то при редактировании)
не без твоей помощи, теперь на сайте красуется полностью русифицированный погодный информер
Показать текст