Com_LinХ и обмен ссылками в Joomla

Логотип Com_LinХСоздание каталога ссылок на сайте полезно как для предложения дополнительной информации читателям, так и для привлечения на свой сайт посетителей, если каталог создается в формате обмена ссылками.

Для 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++.

Комментариев: 10

  • 12.04.2010 Вероника:

    Если сделать описанные изменения пропадают ссылки на заголовках ранее добавленных ссылок. Это можно как-то исправить?

  • 12.04.2010 Кирилл:

    Да вы правы, спасибо за замечание. Добавил условие проверяющие отсутствие ссылки в имени и описании линка для совместимости со «старыми» ссылками.

  • 15.10.2010 Иван:

    Скажите пожалуйста, с кодировкой я все сделан и кракозябры пропали на при вводе текста выводятся знаки вопросов, также с категориями. Как решить проблему?

  • 16.10.2010 Кирилл:

    Привет, Иван.

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

  • 16.10.2010 Иван:

    БД в «utf8», а таблицы Linx били в «latin1_swedish_ci» я поменял её в «utf8_general_ci» соответственно и везде поставил «utf8_general_ci». И еще при добавление ссылки или категории она просто не добавляется, то есть можно добавить только через Linx таблицу в БД.

  • 16.10.2010 Иван:

    А когда добавляешь через БД то и добавляется и без знаков вопроса. Уже не знаю... Прошу помощи, заранее спасибо.

  • 18.10.2010 Иван:

    Все, я разобрался. Поменял кодировку файлов и всё ок.

    Кирилл, спасибо за помощь. Если что я вернусь;)

    • 18.10.2010 Кирилл:

      Не за что Иван, вы же сами разобрались с проблемой :) .

      Если будут другие вопросы или предложения — вэлком.

  • 16.11.2011 alex:

    Cылка на скачивание компонента не работает.

    • 17.11.2011 Кирилл:

      Обновил ссылку в статье, компонент с оффсайта можно скачать только после регистрации.


Добавление комментария:

 css.php