Создание каталога ссылок на сайте полезно как для предложения дополнительной информации читателям, так и для привлечения на свой сайт посетителей, если каталог создается в формате обмена ссылками.
Для Joomla как и для многих других популярных CMS есть готовые компоненты (скрипты) помогающие реализовать эту задачу.
Одним из лучших компонентов каталога ссылок с функцией обмена являетя LinХ (com_linx).
Рассмотрим варианты его улучшения.
1. По-умолчанию из текста введенного в поле «Описание ссылки» вырезается html-код, что иногда неудобно.
Можно получать содержимое поля из POST-запроса простым способом:
$link_description = $_REQUEST[link_description]; |
но такой вариант может быть уязвим с точки зрения безопасности, чтобы не ломать себе этим голову рассмотрим описание функции mosGetParam()
(http://help.joomla.org/content/view/516/125/):
mixed mosGetParam ( array &$arr, string $name [, mixed $default [, int $mask ]] )
$arr
is the array that the parameter will be retrieved from. This can be any array but the most commonly used ones are $_POST and $_GET.
$name
is the name of the parameter field to be retrieved.
$default
is the optional default value that will be returned if $name is not present in $arr. This parameter is optional and if omitted will default to null.
$mask
is an optional parameter containing one or more of the following flags:_MOS_ALLOWHTML
Do not strip HTML tags from the data.
_MOS_NOTRIM
Do not remove leading and trailing whitespace characters.
_MOS_ALLOWRAW
Do not filter the data. Introduced in Joomla 1.0.If omitted this parameter defaults to 0 (that is, data will be stripped of HTML tags and leading and trailing whitespace characters).
Таким образом правильнее и надежнее будет разрешить html-теги в этом поле, модифицировав код получения содержимого этого поля в файле \administrator\components\com_linx\admin.linx.php в функциях save_edit_link() и save_link(), следующим образом:
//$link_description = mosGetParam( $_REQUEST, 'link_description', '' ); $link_description = mosGetParam( $_REQUEST, 'link_description', '', _MOS_ALLOWHTML ); |
Также необходимо отключить обработку содержимого поля функцией strip_tags() в файле \components\com_linx\include\class.linx.php:
//$link_description = strip_tags(trim($link_description)); $link_description = trim($link_description); |
2. Теми же методами отключаем ссылку в «названии сайта» \administrator\components\com_linx\admin.linx.php:
//$link_name = mosGetParam( $_REQUEST, 'link_name', '' ); $link_name = mosGetParam( $_REQUEST, 'link_name', '', _MOS_ALLOWHTML ); |
Отключаем вырезание тегов, оставляем так \components\com_linx\include\class.linx.php:
//$link_name = strip_tags(trim($link_name)); $link_name = trim($link_name); |
Применим условие на вывод тегов для названия ссылки/сайта \components\com_linx\linx.html.php:
//echo "<a href=\"".$row->url."\" target=\"_blank\">" . $row->link_name . "</a><br />"; if ((strpos($row->link_description,'href')) or (strpos($row->link_name,'href'))) {echo "<b>" . $row->link_name . "</b><br />";} else {echo "<a href=\"".$row->url."\" target=\"_blank\">" . $row->link_name . "</a><br /> ";} |
3. Иногда встроенная функция проверки обратных ссылок их не находит. Это происходит из-за присутствия у одной из сторон обмена в адресе ссылки алиаса www.. Учитывая это исправляем проверку:
//Look for our link among all the found links //if (in_array(strtolower($my_url),$recip_links)) { if (in_array(strtolower($my_url),$recip_links) or in_array(str_replace('www.','',strtolower($my_url)),$recip_links)) { $result = 1; //Link found } |
Кокретно эта проверка сделана для случая кода URL сайта в настройках $my_url содержит алиас www., а ссылка на ссылающейся странице нет ($recip_links массив всех ссылок на странице сайта-партнера по обмену).
Скачать патч
Страница для скачивания компонента com_Linx (требуется регистрация).
- Работа патча протестирована на Joomla 1.0.XX и Joomla 1.5.XX.
- Если на Joomla 1.5.XX вместо страниц компонента вы видите белый экран и сообщение Direct Access to this location is not allowed. опубликуйте системный плагин — Поддержка старых расширений (Legacy).
- Если на Joomla 1.5.XX в админке компонента вы увидите квадратные кракозябры, перекодируйте файлы admin.linx.php и admin.linx.html.php в кодировку UTF-8 без BOM например в редакторе Notepad++.
Если сделать описанные изменения пропадают ссылки на заголовках ранее добавленных ссылок. Это можно как-то исправить?
Да вы правы, спасибо за замечание. Добавил условие проверяющие отсутствие ссылки в имени и описании линка для совместимости со «старыми» ссылками.
Скажите пожалуйста, с кодировкой я все сделан и кракозябры пропали на при вводе текста выводятся знаки вопросов, также с категориями. Как решить проблему?
Привет, Иван.
Если я правильно понял, создаете ссылку с описанием или категорию, а она отображается знаками вопросов? В какой кодировке БД?
БД в «utf8», а таблицы Linx били в «latin1_swedish_ci» я поменял её в «utf8_general_ci» соответственно и везде поставил «utf8_general_ci». И еще при добавление ссылки или категории она просто не добавляется, то есть можно добавить только через Linx таблицу в БД.
А когда добавляешь через БД то и добавляется и без знаков вопроса. Уже не знаю... Прошу помощи, заранее спасибо.
Все, я разобрался. Поменял кодировку файлов и всё ок.
Кирилл, спасибо за помощь. Если что я вернусь;)
Не за что Иван, вы же сами разобрались с проблемой .
Если будут другие вопросы или предложения — вэлком.
Cылка на скачивание компонента не работает.
Обновил ссылку в статье, компонент с оффсайта можно скачать только после регистрации.