Проверка вхождения текста для поля профиля

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 8 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

Проверка вхождения текста для поля профиля

Сообщение Alecto »

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

в файле memberlist_body.html есть вот такой код (или аналогичный - не важно):

Код: Выделить всё

<td class="info"><!-- IF memberrow.U_WWW or memberrow.LOCATION --><!-- IF memberrow.U_WWW --><div><a href="{memberrow.U_WWW}" {EXTERNAL_LINK_TARGET} .... </div><!-- ENDIF --><!-- ELSE -->&nbsp;<!-- ENDIF --></td>
необходимо добавить условие, что-то типа:

Код: Выделить всё

if (strstr({memberrow.U_WWW}, "имя сайта")) { ... }
проблема в том, что это html и такое условие не работает.

можно ли выполнить такую проверку с помощью конструкции

Код: Выделить всё

<!-- IF ... -->
или как это сделать другим способом?
Аватара пользователя
Айдар
Former team member
Сообщения: 1687
Стаж: 15 лет 9 месяцев
Откуда: KZN
Благодарил (а): 93 раза
Поблагодарили: 189 раз

Re: Проверка вхождения текста для поля профиля

Сообщение Айдар »

Первое, что приходит на ум:

Код: Выделить всё

<!-- IF memberrow.U_WWW == 'имя сайта'  -->
Попробуйте, а вдруг! :)
Но тут важно, чтобы то, что между кавычками в точности совпадало с введенным пользователем (с www, http://, со слешем в конце или без всего этого).
In Web We Trust
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 8 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

Re: Проверка вхождения текста для поля профиля

Сообщение Alecto »

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

например,
есть строка

Код: Выделить всё

http://www.phpbbguru.net/community/post314549.html#p314549
в которой должно совпасть только имя сайта

Код: Выделить всё

phpbbguru
Аватара пользователя
Айдар
Former team member
Сообщения: 1687
Стаж: 15 лет 9 месяцев
Откуда: KZN
Благодарил (а): 93 раза
Поблагодарили: 189 раз

Re: Проверка вхождения текста для поля профиля

Сообщение Айдар »

In Web We Trust
Аватара пользователя
Nekstati
Поддержка
Поддержка
Сообщения: 3365
Стаж: 17 лет 6 месяцев
Благодарил (а): 37 раз
Поблагодарили: 1454 раза

Re: Проверка вхождения текста для поля профиля

Сообщение Nekstati »

FomenkoAndrey, а какой именно код вам надо отрабатывать?

JS:

Код: Выделить всё

function memberCheck() {
	elem = getElementById('element_id');
	if (elem.innerHTML.indexOf('sitename') >= 0) {
		do something;
	}
}

onload_functions.push ('memberCheck()');
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 8 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

Re: Проверка вхождения текста для поля профиля

Сообщение Alecto »

Nekstati
по сути, на примере я привел именно то, что меня интересовало - это проверка ссылок, которые пользователи размещают в своем профиле.
идея была такова: вставить дополнительную проверку при выводе таблицы со списком пользователей и, если встречается внешняя ссылка, то вместо нее выводить предупредительный текст. если ссылка в пределах сайта - все ОК.

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

к сожалению я не настолько продвинулся в джава, чтобы разобраться с приведенным вами кодом (( ... с тем, куда вставлять функцию, как ее вызывать и что прописывать вместо дусамсинг.
Аватара пользователя
Nekstati
Поддержка
Поддержка
Сообщения: 3365
Стаж: 17 лет 6 месяцев
Благодарил (а): 37 раз
Поблагодарили: 1454 раза

Re: Проверка вхождения текста для поля профиля

Сообщение Nekstati »

Задаём интересующим нас ссылкам какой-либо класс:
<a href="{memberrow.U_WWW}"<a class="user-www" href="{memberrow.U_WWW}"

Пишем скрипт:

Код: Выделить всё

<script type="text/javascript">
function userWwwCheck() {
	var links = document.getElementsByTagName('A');
	for (var i = 0; i < links.length; i++) {
		if (links[i].className == 'user-www' && links[i].href.indexOf('sitename.ru') < 0) {
			replace = document.createTextNode('Не влезай! Убьёт!');
			links[i].parentNode.replaceChild(replace, links[i]);
		}
	}
}
onload_functions.push('userWwwCheck()');
</script>
Помещаем его куда-то в memberlist_body.html — например, перед этими строками:

Код: Выделить всё

<!-- IF S_IN_SEARCH_POPUP -->
	<!-- INCLUDE simple_footer.html -->
В этом примере скрипт перебирает ссылки с классом "user-www", и если адрес ссылки не содержит "sitename.ru", то ссылка заменяется на текст "Не влезай! Убьёт!".
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 8 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

Re: Проверка вхождения текста для поля профиля

Сообщение Alecto »

Nekstati
спасибо! вариант работает.
но, насколько он оптимален?
как установить форматирование для текста?
Последний раз редактировалось Alecto 26.02.2011 16:17, всего редактировалось 2 раза.
Аватара пользователя
Nekstati
Поддержка
Поддержка
Сообщения: 3365
Стаж: 17 лет 6 месяцев
Благодарил (а): 37 раз
Поблагодарили: 1454 раза

Re: Проверка вхождения текста для поля профиля

Сообщение Nekstati »

FomenkoAndrey писал(а):страница стала загружаться заметно медленнее...
Это вам чудится. ;) Такой скрипт может затормозить загрузку, да. Микросекунд на 100.

Для форматирования заменяем это

Код: Выделить всё

			replace = document.createTextNode('Не влезай! Убьёт!');
На это

Код: Выделить всё

			replace = document.createElement('span');
			replace.innerHTML = 'Не влезай! Убьёт!';
			replace.className = 'qwerty';
И далее для класса qwerty прописывайте стиль в СSS. Можно и без CSS — последнюю строку написать, например, так: replace.style.color = 'red'; или replace.style.backgroundColor = 'yellow';.

Добавлено спустя 6 минут:
сначала она загружается а потом происходит замена
Попробуйте вместо onload_functions.push('userWwwCheck()'); (что означает «запустить функцию после полной загрузки страницы») запустить её непосредственно: userWwwCheck();.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 8 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

Re: Проверка вхождения текста для поля профиля

Сообщение Alecto »

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

Nekstati, еще раз огромное спасибо!
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Проверка вхождения текста для поля профиля

Сообщение MIT »

Nekstati
Добавь в свой код вызов toLowerCase() для урла, ведь движок позволяет пользователю указать и SiTeNaMe.Ru, а "SiTeNaMe.Ru".indexOf('sitename.ru') равняется -1...
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 8 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

Re: Проверка вхождения текста для поля профиля

Сообщение Alecto »

MIT, Nekstati
поясните пожалуйста, как перевести в нижний регистр передаваемый урл?
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Проверка вхождения текста для поля профиля

Сообщение MIT »

MIT писал(а):toLowerCase()
Добавлено спустя 1 минуту 2 секунды:
Вместо links[i].href.indexOf('sitename.ru') надо links[i].href.toLowerCase().indexOf('sitename.ru').
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 8 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

Re: Проверка вхождения текста для поля профиля

Сообщение Alecto »

хотя... все работает

Код: Выделить всё

		if (links[i].className == 'user-www' && links[i].href.indexOf('mysite') < 0) {...
если mysite не встречается в ссылке - то текст заменяется. регистр в этом случае не критичен, поскольку копируемый адрес внутренней ссылки сайта изначально (всегда!) предоставляется в нижнем регистре.

Добавлено спустя 5 минут 40 секунд:
кстати, попробовал изменить регистр ссылки (для первоначального кода Некстати) - сообщение не заменялось. т.е. скрипт оказался не чувствителен к регистру
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 17 лет 6 месяцев
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 3 раза
Поблагодарили: 351 раз

Re: Проверка вхождения текста для поля профиля

Сообщение MIT »

FomenkoAndrey писал(а):оказался не чувствителен к регистру
Ну-ну... :roll:

Вернуться в «Для авторов (phpBB 3.0.x)»