Перейти к контенту

Улучшение сообщений форума


Рекомендуемые сообщения

Модификация упрощена. Оставлена только страница редиректа, но переписана под максимальную производительность.

 

post-75890-1260018508_thumb.png

 

hidelinks.zip

 

Обновления от 5 дек:

- отключен [hide]

- переписано полностью с целью оптимизации количества запросов к БД и проходов с заменой

 

Обновления от 6 дек:

- исправлена ошибка в javascript - не обнулялись старые формы перехода

Изменено пользователем Ritsuka
Ссылка на комментарий
Поделиться на других сайтах

  • Ответы 55
  • Создана
  • Последний ответ

Лучшие авторы в этой теме

Лучшие авторы в этой теме

Загружено фотографий

Ajax-редирект полностью скрывает ссылку от поисковиков (т.е. в строке состояния браузера она не появляется)? Если так, то вещь очень необходимая (ещё бы разрешить прямые ссылки только для администратора (либо прямые ссылки по специальному значению атрибута rel) - было бы вообще шикарно). Изменено пользователем Kosiak
Ссылка на комментарий
Поделиться на других сайтах

Kosiak, скрытие от поисковиков полное. Реальная ссылка выводится в форму через ajax-запрос. Пока что не скрываются только ссылки в пределах форума. Можно сделать исключения по любой схеме: группа автора поста, дополнительный параметр в ссылке, "белый список" разрешенных сайтов.

 

Т.к. у меня потребности в скрытии ссылок нет, говорите вы, как нужно сделать :D

 

Идиотское название вполне соответствует текущему уровню реализации идеи ;) Предложения по названию так же приветствуются :)

Ссылка на комментарий
Поделиться на других сайтах

Ritsuka, если это возможно, конечно, отдельно хук редерикта, без хайда..

 

См. первый пост.

hook2.zip

Изменено пользователем Ritsuka
Ссылка на комментарий
Поделиться на других сайтах

Evrika, я не знаю. С одной стороны, все вроде правильно написал и обкатал на двух форумах. С другой стороны - хуку всего 6 часов от роду, так что... могут быть скрытые ошибки.

 

В любом случае, можно поставить и удалить - это же хук, а не модификация кода. Он только переопределяет один шаблон, добавляет группу ajax-вызовов и создает дополнительную табличку в БД. Все обратимо и отменяется при удалении хука.

Ссылка на комментарий
Поделиться на других сайтах

По два preg_match_all при выводе каждого поста, независимо от его содержания. И замена str_replace'ом. *__*

Сурово же..

 

На вложенности все сломается.

Ссылка на комментарий
Поделиться на других сайтах

Пока что не скрываются только ссылки в пределах форума.
Это как? В постах же скрываются? Если имеете ввиду ссылки например в копирайте или в сайдбаре, там, где права группы не работают, то можно ввести специальный аттрибут например rel="extlink", который будет из ссылки делать JS код (если это возможно конечно)

 

Предложения по названию так же приветствуются
Hide Links, например или Redirect Links, (это если без хайда в посте, т.к. ИМХО в этом хуке он лишний)

 

отдельно хук редерикта, без хайда..
и это правильно, т.к. они решают разные задачи
Ссылка на комментарий
Поделиться на других сайтах

Сурово. Есть идеи?

 

Можно изменить встроенный bbcode-класс и превратить url-ы в javascript-вызовы там, это будет быстрее и результат парсинга будет кешироваться, но это вмешательство в код форума... Пока мне не удалось найти способ расширить через хук существующий bbcode-класс. Кажется, такой возможности и нет.

 

А тег [hide] я добавил только на пробу. Изначальная задумка - отдельный custom bbcode-класс, парсящий hide с option и оставляющий взамен него "хвосты" вида <!--hide:%id%--> и последующая обратная замена опять же по preg_match_all и с проверкой условий (хранимых в отдельной табличке вместе со скрытыми данными) на контент или сообщение о невыполненных условиях. Тогда в везде кроме форумных постов будет текст <!--hide:22-->, не видимый невооруженным глазом, и данные будут спрятаны надежно и с условиями.

 

Я не хочу переписывать скрипты форума. У меня был модифицированный портал, каждое обновление его приходилось переписывать, а не обновляться тоже нельзя - много ошибок. Вот и получается - либо пишем красиво, но ненадолго, либо основательно, но медленно. Кстати, не так и грузит - учтите, у нас всего по 20 постов на страницу. Единственно что, хочу собрать все $from в один супермассив и сделать только один запрос к БД на одну страницу темы, а не по запросу на каждую ссылку.

 

 

А вообще, хорошо, что хотя бы посмотрели. Спасибо. Если еще выскажете свои идеи - будет совсем хорошо :D

Ссылка на комментарий
Поделиться на других сайтах

Ммм.. интересно конечно и руки чешутся поставить но боязно ставить на свое детище а тестфорума нет)) а вообще мне кажется если есть великолепная "Десятка" хуков и модов важных и нужных, то сей хук я отнесла бы в "первое" число))) Спасибо Ritsuka) Буду ждать обкатанной версии.
Ссылка на комментарий
Поделиться на других сайтах

"Мысля пошла" (с)

 

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

Изменено пользователем Ritsuka
Ссылка на комментарий
Поделиться на других сайтах

"Мысля пошла" (с)

 

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

 

Кстати, а без запросов к БД никак?

Ссылка на комментарий
Поделиться на других сайтах

Сурово. Есть идеи?

 

Как минимум - использовать preg_replace_callback. Для пролистывания циклов - foreach вместо

while(list($id, $post) = each($post_data))

http://ru.php.net/manual/en/function.each.php#75692

 

Если никак нельзя избавиться от preg_match_all, то следует делать проверку strpos'ом на наличие хотя бы одного вхождения [hide]. Это если учесть, что пост с хайдом будет один на сотню.

 

Изначальная задумка - отдельный custom bbcode-класс, парсящий hide с option и оставляющий взамен него "хвосты" вида <!--hide:%id%-->

В точности так я и сделал. Что в двойке, что в тройке. И прошелся по всем граблям, которые возникают от такого подхода. Можно много про это написать, но проще посмотреть код. В конечном счете, это единственный способ реально что-то скрыть. Вернее, ничего умнее я не придумал. ~__~

 

Я не хочу переписывать скрипты форума.

В 90% случаев это придется делать, если модификация затрагивает стандартные функции форума на хоть немного глубоком уровне. Система хуков - полный фейл.

 

Кстати, не так и грузит - учтите, у нас всего по 20 постов на страницу.

Сделайте профилирование xdebug'ом на больших постах. Думаю, это добавляет не менее 20% к общему времени, что есть адски много. Пяток таких модов, и сервер будет тянуть вдвое меньше юзеров.

 

Кстати, а без запросов к БД никак?

На первый взгляд - без проблем. Если хранить информацию по внешним ссылкам и скрытым текстам в таблице posts в виде сериализованных массивов. Это точно эффективнее, чем дополнительный запрос.

Изменено пользователем WildRAID
Ссылка на комментарий
Поделиться на других сайтах

Обновлено. Теперь только скрытие внешних ссылок, только один дополнительный sql-запрос и один проход preg_replace на страницу. Для меня это приемлемо за тот функционал, что дает модуль.

 

WildRAID, если честно, мое мнение таково, что выполняя extend класса с целью override построенной из шаблона функции под ip.board 3 со всеми его итерациями и не кеширующим кешем, переживать из-за миллисекунд разницы при использования each вместо foreach просто смешно.

 

И форум я так же переписывать не буду. Хуки - это очень хорошо, жаль, что вы не хотите в них разбираться.

 

Кстати, а без запросов к БД никак?

 

На первый взгляд - без проблем. Если хранить информацию по внешним ссылкам и скрытым текстам в таблице posts в виде сериализованных массивов. Это точно эффективнее, чем дополнительный запрос.

Минимизировал количество запросов до одного на страницу. Меньше никак. Предложенный WildRAID вариант требует модификации кода форума.

Ссылка на комментарий
Поделиться на других сайтах

Ritsuka, большое человеческое спасибо, нужная вещь !

 

Замечено:

 

1. Если внутренняя ссылка начинается с www (а url форума прописан без www) - определяется как внешняя

Можно ли сделать, чтобы внутренними определялись ссылки forum.xxx и www.forum.xxx ?

 

2. При редактировании сообщения с внешними ссылками (т.е. изменить - там что-то редактируем, добавляем, не обязательно ссылки)

- после сохранения внешние ссылки открываются

 

3. Иногда (как здесь, например) все ссылки на одной СТРАНИЦЕ форума ведут на одну в итоге.

Т.е. в сообщении о переходе на внешнюю ссылку показывается правильная ссылка, при переходе - переводит на одинаковую для всех в данном сообщении ссылку

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

Изменено пользователем Demeter
Ссылка на комментарий
Поделиться на других сайтах

Установил хук..Но при кликанье на cskre в посте - тупо переходит на неё и всё..Нет такой картинки и предупреждения, как в описании хука в посте №1
Ссылка на комментарий
Поделиться на других сайтах

Иногда (как здесь, например) все ссылки
У вас все ссылки, даже внутренние имеют аттрибут rel=nofollow external и noindex, а смысл этого мода избавиться от таких конструкций, особенно на внутренних ссылках, т.к. метод IPS как химиотерамия или ковровые бомбардировки - убивает спам, но также убивает внутисайтовую перелинковку и нормальное перетекание PR по сайту...

Нужно использовать только один метод.

Ссылка на комментарий
Поделиться на других сайтах

Kosiak, спасибо, дельное замечание

rel=nofollow external и noindex - убрал, но проблема переадресации всех внешних ссылок на одну в рамках одной страницы форума осталась :D

Ссылка на комментарий
Поделиться на других сайтах

Ritsuka, большое человеческое спасибо, нужная вещь !

 

Замечено:

 

1. Если внутренняя ссылка начинается с www (а url форума прописан без www) - определяется как внешняя

Можно ли сделать, чтобы внутренними определялись ссылки forum.xxx и www.forum.xxx ?

 

2. При редактировании сообщения с внешними ссылками (т.е. изменить - там что-то редактируем, добавляем, не обязательно ссылки)

- после сохранения внешние ссылки открываются

 

3. Иногда (как здесь, например) все ссылки на одной СТРАНИЦЕ форума ведут на одну в итоге.

Т.е. в сообщении о переходе на внешнюю ссылку показывается правильная ссылка, при переходе - переводит на одинаковую для всех в данном сообщении ссылку

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

 

Большое спасибо за доверие и за то, что решились протестировать хук на рабочем форуме.

 

1. Да, это недоработка. Сейчас займусь исправлением.

 

2. Это не ошибка. Вы ведь говорите о быстром ajax-редактировании сообщения? При его использовании новое содержимое сообщения вставляется в форум в обход любых фильтров. После обновления страницы та же ссылка будет уже скрыта. Учитывая назначение хука - так ли критично, что если авторизованный пользователь, автор поста, имеющий право редактировать свои сообщения, при использовании быстрого редактирования сообщения через ajax будет на один раз видеть реальные ссылки? В общем, попробую это тоже учесть, но, кажется, "овчинка выделки не стоит".

 

3. Да, ошибку подтверждаю. У вас какие-то проблемы с форумом - графика и скрипты грузятся ооооочень медленно, что затрудняет поиск и отладку проблемы. Как только наладится - все проверю.

 

tryer, у вас какая версия форума? Кажется, на версиях младше 3.0.3 не работает переопределение одного шаблона... :D

 

 

3. Нашел ошибку. У вас не уничтожаются старые popup'ы, а просто скрываются... Сейчас сделаю принудительное уничтожение, 5 минут.

Ссылка на комментарий
Поделиться на других сайтах

У вас какие-то проблемы с форумом - графика и скрипты грузятся ооооочень медленно, что затрудняет поиск и отладку проблемы. Как только наладится - все проверю.

 

Странно, у меня все очень быстро :D

Ссылка на комментарий
Поделиться на других сайтах

Замените файл /public/js/ritsu.hidelinks.js на исправленный и обновите через Ctrl+F5. Хук переустанавливать не нужно.

ritsu.hidelinks.js.zip

 

Сейчас обновлю архив с хуком. Насчет форума - у меня ваша страница грузится полностью почти 2 минуты... Не знаю почему так.

Ссылка на комментарий
Поделиться на других сайтах

Версия форума 304. Переустановил хук - всё так же - при кликанье на ссылку переход без окошка предупреждающего...Странно, что делаю не так?

 

ДОБАВЛЕНО:

Переместил хук в самый конец в списке и обновил кэш - и всё ЗАРАБОТАЛО!!!!!

Спасибо за прекрасный хук!

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить в этой теме...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.