Link для ССК

Главные вкладки

Аватар пользователя a.mohax a.mohax 1 июня 2008 в 10:46

Модуль Link для ССК позваляет добавить к Типам матерьялов новое поле для ввода ссылки. Но при создании ссылки, он добаляет в начало адрес "http://www.site.ru/?q=". т.е. если я вставляю ссылку: "magnet%3A&xt=urn:tree:tiger:FOMLMUWW47TKZUTSVO3XS4MOCP7T5K2YONRVH3Y&xl=645773523&dn=hunting-unlimited-2008.iso", то модуль ее переделывает на такую: "http://site.ru/?q=magnet%3A&xt=urn:tree:tiger:FOMLMUWW47TKZUTSVO3XS4MOCP...". Подскажите как можно вставить чистую ссылку?

Комментарии

Аватар пользователя a.mohax a.mohax 8 июня 2008 в 14:32

Дело в том, что мне надо чтоб ссылка была без "http://site.ru/?q=" и без "http://" ссылка должнабыть такая "magnet:?xt=urn:tree:tiger:TVJKR6E3LFPSBYEJIQRMXMDBKJ47O54GMYLGUJA&xl=4336&dn=DVD.mds", что бы автоматически запускалась программа ассоциированная с таким видом ссылок

Аватар пользователя bohart@InternetDevels.com bohart@Internet... 11 июня 2008 в 11:24

ну я б тогда создал свой формат вывода этого поля.
для этого можно просто отредактировал модуль link.
там будет функция link_field_formatter_info добавляем свой тип

'my_type' => array(
      'label' => t('this is my type'),
      'field types' => array('link'),
    ),

а потом в функции link_field_formatter задаём формат вывода

  if ($formatter == 'my_type') {
/**
 * код для вывода который надо, например
 */

    $myurl = '<div class="my_type"><a href="'. $item['url'] .'" title="'. $item['title'] .'"></a></div> ';
    return $myurl;
  }

как по мне самый простой способ Smile

Аватар пользователя anikey anikey 6 июля 2008 в 15:50

Этот вопрос так и не решили? ведь в новых версиях ф-ции link_field_formatter просто нет, да и хотелось бы как-то по-человечески сделать, дабы magnet ссылки проверялись на правельность или просто выводило ссылку как она есть, без фильтрации...

Аватар пользователя a.mohax a.mohax 6 июля 2008 в 17:49

Я решил это так, установил формат ввода "Full Html". Также некоторые вузивуг редакторы тоже коверкают магнет ссылки, например FCKEditor. Из этого понятно, что в формат ввода надо добавить какойто тег, и все будет работать, наверно...

Аватар пользователя anikey anikey 18 июля 2008 в 11:42

Сделал криво, но оно работает, пойже можно исправить.
sites/all/modules/link/link.module
Ф-ция link_validate_url
$allowed_protocols = variable_get('filter_allowed_protocols', array('http', 'https', 'ftp', 'news', 'nntp', 'telnet', 'mailto', 'irc', 'ssh', 'sftp', 'webcal'));
Добавить в массив нужный протокол, в моем случае 'magnet'. Должны выйти так:
$allowed_protocols = variable_get('filter_allowed_protocols', array('http', 'https', 'ftp', 'news', 'magnet', 'nntp', 'telnet', 'mailto', 'irc', 'ssh', 'sftp', 'webcal'));

далее смотрим немного ниже
if (preg_match($internal_pattern . $end, $text)) {
return LINK_INTERNAL;
}
if (preg_match($external_pattern . $end, $text)) {
return LINK_EXTERNAL;
}
Это строчки проверки на правильность URL и Mail, их ссылка magnet не пройдет, решил проблему тупо, после этих строчек добавил.
if (preg_match('#^magnet:#', $text)) {
return LINK_EXTERNAL;
}
можете пинать, но в регулярных выражениях ничего не понимаю, но работает. само собой все ссылки начинающиеся с 'magnet:' будут валидны, но даже я понимаю, что этого мало и нужно проверять хеш на валидность, размер файла и его название, но как я уже сказал, я ничего не понимаю в регулярных выражениях.

если закончить на этом, то ссылки будут иметь вид http:///magnet:...

далее, чтобы
исправить это ищим ф-цию theme_link_formatter_default;
там должно быть что-то в роде этого
if (!empty($element['#item']['display_title']) && !empty($element['#item']['url'])) {
return l($element['#item']['display_title'], $element['#item']['url'], $element['#item']);
}
если заменить на это

if (!empty($element['#item']['display_title']) && !empty($element['#item']['url'])) {
return ''.$element['#item']['display_title'].'';
}
то ссылки должны работать