Контекстные ссылки v2.2

+44
2.12K
Предистория тут и тут
Иллюстрация
Добавлено в версии 2.2
1. Обработка описания объекта InstantMaps
2. Добавлена проверка соответствия адреса ссылки и текущей страницы, если совпадает — ключ не обрабатывается.
3. Управление в каком контенте будет работать плагин вынесено в админку.
4. Управление обработкой ключей как корня слов теперь возможно для каждой отдельной пары, и введено понятие квантификатора — число символов до начала или после конца ключа, при котором слово будет оформлено ссылкой. Если квантификатор не указан, пара обрабатыватся как обычно.
пример|/primer.html|1 — слово "примеры" будет ссылкой, а слово "примерка" нет

Файлы тут.
Файлы для 1.10 тут.
Проверено на ICMS 1.9 и 1.8, при переустановке не забудьте сохранить свои пары ключ|ссылка.

Прикрутить к Универсальному каталогу и к "Вопросы и ответы" не получилось, там просто напросто нет событий GET_...
Это возможно при модификации самих компонентов, но выходит за рамки плагина.

P.S. Для поддержки InstantMaps в фронтенд компонента карт необходимо добавить
  1. $item = cmsCore::callEvent('GET_MAP_OBJECT', $item);
(в блоке ПРОСМОТР ОБЪЕКТА)
и в таблицу cms_event_hooks в базе данных добавить само событие GET_MAP_OBJECT, plugin_id для события можно посмотреть в таблице cms_plugins, он должен быть равен id элемента p_contextlinks.
  1. INSERT INTO `имя_базы`.`cms_event_hooks` (`id`, `event`, `plugin_id`) VALUES (NULL, 'GET_MAP_OBJECT', 'ИД-плагина');
+3
mk727 mk727 9 лет назад #
Наконец-то нашелся человек который довел до ума этот очень нужный компонент!
0
Димитриус Димитриус 9 лет назад #
Прикрутить к Универсальному каталогу и к "Вопросы и ответы" не получилось, там просто напросто нет событий GET_... Это возможно при модификации самих компонентов, но выходит за рамки плагина.
Думаю, раз сделали хак аплета, то можно сделать хак и каталога
+1
sotastroy sotastroy 9 лет назад #
Было бы здорово, если разработчики включат это в базовый функционал системы, чтобы не лезть в код компонентов каждый раз и повторять эти процедуры при обновлении.
+1
googlebot googlebot 9 лет назад #
имеется в виду файл /admin/applets/plugins.php? Было бы неплохо если бы сделали возможность задавать тип поля конфигурации без вмешательства в системный файл.
+2
Димитриус Димитриус 9 лет назад #
Это можно сделать так:
Делаете модуль, в нём настраиваете нужные вам поля.
В плагине делаете лоуд конфеиг, и из него тянете настройки очень удобно.
0
googlebot googlebot 9 лет назад #
слишком сложно для меня, я новичек в пхп а ооп особенно туго идет, если бы пример реализации...
0
lezginka.ru lezginka.ru 9 лет назад #
Димитриус, а нельзя googlebot пример скинуть :)
+1
Димитриус Димитриус 9 лет назад #
Код PHP:
  1. $module_id = $inCore->getModuleId('mod_adminlink');
  2. $cfg = $inCore->loadModuleConfig($module_id);
0
Димитриус Димитриус 9 лет назад #
$cfg['имя переменной']
0
googlebot googlebot 9 лет назад #
т.е. вся настройка будет осуществляться из модуля?
0
Димитриус Димитриус 9 лет назад #
в точку
0
googlebot googlebot 9 лет назад #
ну так это тоже костыльно-подпорочная система получается, за наводку спасибо, но не думаю что это удобнее для админа будет, лучше попробовать ядро поковырять на предмет поддержки различных типов полей в конфиге плагинов, как это сделано в модулях.
0
Дмитрий Дмитрий 9 лет назад #
У меня, при написании комментария выдаёт "Warning: Invalid argument supplied for foreach() in /home/*/***/сайт/public_html/plugins/p_contextlinks/plugin.php on line 145"
Сама ссылка генерируется
В чём проблема?
0
googlebot googlebot 9 лет назад #
на какой ключевик ссылку ставите? лучше в личку еще и сайт.
0
lezginka.ru lezginka.ru 9 лет назад #
googlebot , есть ли возможность указывать обработку ключа в указанном разделе статей, а не во всем компоненте ?
+1
googlebot googlebot 9 лет назад #
на данный момент нет, если без управления в админке, могу модифицировать вам под конкретный раздел.
0
googlebot googlebot 9 лет назад #
Обновил архив, была небольшая ошибочка, проявлявшаяся на некоторых хостингах. Переустанавливать не надо, можно просто заменить сам файл плагина plugin.php
0
mk727 mk727 9 лет назад #
Не обрабатывается настройка "Количество замен на страницу" - при любом значении и пустом поле заменяет все слова.
0
googlebot googlebot 9 лет назад #
Эта настройка работает отдельно для каждого блока размещенного на странице, например, если стоит ограничение 1, а слово встечается 3 раза в статье и 3 раза в комментариях к ней, на странице будет 2 ссылки - 1 в тексте статьи и 1 в комментариях, если у Вас не так, пришлите в личку ссылку и список настроек плагина.
-1
Константин Г. Константин Г. 9 лет назад #
Прикольно. все версии посморел, коменты и всё такое-так и не понял зачем оно.
0
googlebot googlebot 9 лет назад #
Ну если уж так интересно, поищите материалы на тему "перелинковка", "распределение веса страниц", "внутренняя оптимизация"...
Кроме того, если малость подумать и переделать для линковки например характеристик каталога, объявлений и т.п., можно использовать и для людей...
0
Константин Г. Константин Г. 9 лет назад #
та я сам занимался оптимизацией,просто я не понял чтоо делает этот плагин ...
0
lezginka.ru lezginka.ru 9 лет назад #
Константин Г. , а ты точно сайты оптимизировал :))
без обид.
+1
googlebot googlebot 9 лет назад #
добавил сборку для 1.10
0
toropa toropa 9 лет назад #
для 1.10.1 пробовали? у меня не работает
0
googlebot googlebot 9 лет назад #
проверял на тестовой установке и на живом сайте, работает.
0
Петр Петр 9 лет назад #
не работает на 1.10.1
вместо ключей сохраняется "Array"
0
googlebot googlebot 9 лет назад #
удалите плагин перезалейте файлы из архива для 1.10 и установите заново, такой глюк наблюдался если просто менять файлы без переустановки.
0
Петр Петр 9 лет назад #
спасибо! попробую
0
Vyatich Vyatich 8 лет назад #
Прошу прощения, но у меня тоже "Array" вместо записей.
Плагин ранее не был установлен. С чем может быть связано?
Версия CMS- 1.10.1
Может что-то с правами? У меня самопальный сервер.
0
Vyatich Vyatich 8 лет назад #
Права пробовал исправить, на всякий случай, с владельцем файлов поработал, но всё так же.
0
Vyatich Vyatich 8 лет назад #
В таблице запись появляется, но в настройках плагина заменяется на "Array" и контекст не работает.
0
Vyatich Vyatich 8 лет назад #
Хммм... Не стал удалять запись "Array", с новой строки добавил новую запись и всё начало работать.
Странно, но как-то так...
0
tokarev tokarev 9 лет назад #
и в таблицу cms_event_hooks в базе данных добавить само событие GET_MAP_OBJECT
вот убейте меня, но я в MySQLе - как в лесу тёмном... как произвести сие таинственное действие-то? научите, плиз
0
toropa toropa 9 лет назад #
У меня не работает. googlebot пробовал разобраться но никак. Как-то странно, на 1.9 проблем нет, а этот же плагин на 1.10 не работает. Только текст на латинге срабатывает. Локали тут думаю нипричем, так как оба сайта на одном хостинге. Плагин очень нужен с точки зрения перелинковки. Кто решил уже эту проблему7
0
wportal wportal 9 лет назад #
также не работает
пробовала на своем и дефолтном шаблоне
0
googlebot googlebot 9 лет назад #
К сожалению так и не смог разобраться с украинским хостером и украинскими локалями для кодировки utf, если у Вас русский, свяжитесь со мной, попробую помочь.
0
Vyatich Vyatich 8 лет назад #
Озаботился тем, что контекст открывается в этом же окне, т.е. не прописано значение "target" для ссылки.
Для того, что бы ссылка контекста открывалась в новом окне строку(у меня 137):
Код PHP:
  1. $replacement[$i] = '<a href="'.$replacement[$i].'">$1</a>';
Приведём к виду:
Код PHP:
  1. $replacement[$i] = '<a href="'.$replacement[$i].'" target="_blank">$1</a>';
Может быть кому-то нужно, забирайте. Удачи.
0
Thanatognozija Thanatognozija 8 лет назад #
Здравствуйте! У меня, как всегда, тупой вопрос...

1. Видят ли поисковики все это чудо, как внутренние ссылки? Почему вопрос, потому, что я через админку не вижу появившихся ссылок, а вот на странице они есть.

2. Я так понял, что если я добавил ссылку вида пример|/primer.html, то я больше не могу слово "пример" перенаправить, скажем, на страницу пример|/primer1.html? То есть, одно слово, на одну страницу? Но ведь у меня статей со словом "Пример" может быть много? Или я могу писать там 300 раз одно и тоже слово и оно будет перенаправлять по очереди? Может кто-то сталкивался с таким?
0
googlebot googlebot 8 лет назад #
1. видят - смотрите исходный код страницы и кеш поисковиков после индексации
2. я не могу себе представить ситуации, когда бы понадобилось одну и ту же ключевую фразу направлять на разные страницы, по крайней мере с точки зрения SEO. Поисковик (за крайне редким исключением) все равно выберет 1 наиболее релевантную с его точки зрения. Если у Вас много статей по теме "Пример", создайте категорию "Пример", в которую поместите эти статьи и уже эту категорию прокачивайте.
0
Thanatognozija Thanatognozija 8 лет назад #
Спасибо большое за ответ. У меня не стоял вопрос исключительно в прокачке, но и чтобы на другие статьи направлялось тоже. Человек читает статью, там есть словосочетание "личность", вот, он с одной статьи перешел на статью "Личность в экзистенциальной психологии", а с другой будет опять туда идти? А если это книга, разбитая на страницы? Я просто подумал, чтобы это было наподобие того, что выводится внизу статей, типа "похожие статьи". вот.... Человек натыкаясь на ссылку, может перейти по ней и найти что-то для себя новенькое, а так, он будет ходить на одну и туже статью постоянно и подумает: "О, Боже, я ведь уже двести раз тут был, уже наизусть выучил все, а меня опять сюда направили... Наверное на этом сайте больше ничего нет, кроме этой статьи - странный сайт, про личность одна статья всего... хм... пойду к другим лучше..." Вот, примерно такой ход моих мыслей. Но если речь идет только о поисковиках, то это просто супер бомба, а не плагин. Огромное спасибо. Хотя, может я и не прав, ведь и в Википедии одной ссылке присвоена одна статья, но с оговоркой, что типа "Есть и другие значения этого понятия, вот"...
0
googlebot googlebot 8 лет назад #
для тех целей, о которых Вы говорите обычно используют теги
0
Thanatognozija Thanatognozija 8 лет назад #
Да, я вот тоже начал задумываться об этом, что как-то я странно очень. Тем более всегда есть варианты - Личность, личности и т.д... Я все понял, спасибо. Главное, что поисковики это видят и титанический труд облегчается в разы.
0
Vlad Vlad 8 лет назад #
После обновления 1,10,2 плагин работает?
0
googlebot googlebot 8 лет назад #
Пока не проверял, до конца лета вряд-ли получится пощупать 1.10.2
0
Vlad Vlad 8 лет назад #
Проверил в статьях работает, в инмапс не могу в базу строчку добавить, прочитал то что выше, и то куда отправляли по ссылке.
В phpmyadmin на закладке sql. Если для закладок - никаких запросов не надо делать, просто выберите таблицу cms_event_hooks, и на вкладке обзор добавьте новую строчку...
Во вкладке обзор не понимаю как добавить строку. Хочу уточнить,Если делать sql запрос то нужно на вкладке sql вставить эту строку со своими данными и нажать ОК?
Код PHP:
  1. INSERT INTO `имя_базы`.`cms_event_hooks` (`id`, `event`, `plugin_id`) VALUES (NULL, 'GET_MAP_OBJECT', 'ИД-плагина');
0
Vlad Vlad 8 лет назад #
Это код во фронтенде в ПРОСМОТР ОБЪЕКТА в каком месте (точнее между каких строк)вставлять?
Код PHP:
  1. $item = cmsCore::callEvent('GET_MAP_OBJECT', $item);
0
googlebot googlebot 8 лет назад #
после
Код PHP:
  1. if ($do=='item'){
0
Vlad Vlad 8 лет назад #
Там не заработало заработало между этих строк.
Код PHP:
  1. //проверяем что задан шаблон
  2. if (!$item['tpl']) { $item['tpl'] = 'com_inmaps_item.tpl'; }
  3. $item = cmsCore::callEvent('GET_MAP_OBJECT', $item);
  4. //передаем все в шаблон
В базе запрос сделел потом смотрю такая строка уже есть (такое возможно?) удалил ту которую сделал(может зря?). В общем в инмпс тоже работает! на 1,10,2 Спасибо за плагин!
0
googlebot googlebot 8 лет назад #
да, заменив "имя_базы" и "ИД-плагина"
+1
Thanatognozija Thanatognozija 8 лет назад #
Здравствуйте, скажите, пожалуйста, а можно ли сделать так, чтобы ссылка не отображалась в заголовке статьи, например, если заголовок h1 h2 h3?
0
googlebot googlebot 8 лет назад #
Мой косяк, забыл про заголовки, штатный h1 статей и других компонентов не обрабатывается, вот и не обратил внимания, спасибо что нашли.
чтобы поправить, достаточно в регулярку добавить выражение типа <h[1-9][^>]*>[\W\w]*?<\/h[1-9]>, т.е. 160 строка должна выглядеть примерно так:
Код PHP:
  1. $regexp = '/(<h[1-9][^>]*>[\W\w]*?<\/h[1-9]>|<a\s+[^>]*>[\W\w]*?<\/a>|<a\s+[^>]*>[\W\w]*?<\/a>|<iframe[^>]*>[\W\w]*?<\/iframe>|<script[^>]*>[\W\w]*?<\/script>|<object[^>]*>[\W\w]*?<\/object>|<embed[^>]*>[\W\w]*?<\/embed>|<[^>]*?>)/i';
+1
irbis irbis 8 лет назад #
Здравствуйте,

Что-то не получается получить рабочую версия. InstantCMS 1.10.1
Файлы все выложил, установил. Ссылки не появляются. Можно выложить последнюю рабочую версию или подскажите, в чем может быть проблема.
0
googlebot googlebot 8 лет назад #
По ссылкам из поста последние версии, может для 1.9 скачали? попробуйте перезалить файлы и переустановить, если не получится стукнитесь в личку через 2 недели, сейчас на отдыхе, инет в отеле еле шевелится...
0
irbis irbis 8 лет назад #
Я файлы перезаливаю, вот только ссылка на переустановку не появляется.
0
Thanatognozija Thanatognozija 8 лет назад #
Спасибо большое, все вылечилось теперь... Огромное спасибо!
0
Thanatognozija Thanatognozija 8 лет назад #
Спасибо большое, все вылечилось теперь... Огромное спасибо!
+1
irbis irbis 8 лет назад #
Совместными с googlebot силами пришли к следующему решению:
if (!is_numeric($quant[$i])||$quant[$i] == 0) {
$pattern[$i] = '/\s('.trim($pattern[$i]).')\s/ius';
$replacement[$i] = ' <a href="'.$replacement[$i].'">$1</a> ';
} else {
$pattern[$i] = '/\s([A-Za-zа-яА-ЯёЁ0-9]{0,'.$quant[$i].'})('.trim($pattern[$i]).')([A-Za-zа-яА-ЯёЁ0-9]{0,'.$quant[$i].'})\s/ius';
$replacement[$i] = ' <a href="'.$replacement[$i].'">$1$2$3</a> ';
}

Помогло в моем случае. Версия InstantCMS 1.10.1.
+1
Clear Clear 8 лет назад #
Были ли обновления на 1.10.3 ?
0
googlebot googlebot 8 лет назад #
Не было, но кто-то писал что работает
0
Thanatognozija Thanatognozija 8 лет назад #
В соседнем блоге появился компонент Перелинковка, где говорится, что работает на всех страницах. Может быть можно данное чудо прикрутить как-то к видеокаталогу, к каталогу, разве нельзя если там нет событий GET_..., поставить их туда как-то? zst
0
googlebot googlebot 8 лет назад #
Ну если все что там написано работает, не грузит сайт, да еще и оформлено отдельным компонентом, то заявленные 500 р. совсем небольшая цена.
+1
Thanatognozija Thanatognozija 8 лет назад #
Вот, да, главное - не грузит сайт, это точно, прописал 3000 линков - сайт задумался очень сильно и хостер сразу оживился с напоминаниями о проц нагрузке... sad Почему же грузит сайт, тут еще один был плагин подобный, я туда загрузил все 3000 линков, и все нормально, он без БД работает. Там конечно ошибки, он не рабочий, но не грузит... вот что главное... А если избавиться от БД, может и этот не будет грузить?
+1
Thanatognozija Thanatognozija 8 лет назад #
Жаль, что тема заглохла, но все же я задам вопрос, можно ли, чтобы этот плагин брал данные не из БД, а из файла, как это реализовано здесь: http://instantcms.ru/blogs/blog-cozanostra/perelinkovka-statei-instantcms-1-10-1.html. Еще раз хочу сказать, что при 3000 тысячах если в файле работает все нормально, если через БД, то сайт становится. Хотел провести эксперимент, но не знаю как переключиться с БД на файл, все перепробовал, не получается. :(

Еще от автора

Плагин "Контекстные ссылки" v2.1
Модификация плагина Марата версии 2.0 (с хаком /admin/applets/plugins.php) Основные отличия: 1.
Имитация lightbox в статьях
Небольшой фильтр, который делает ресайз изображений в статьях, отформатированных встроенным редактором FCKeditor к единому размеру.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.