Модуль 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...". Подскажите как можно вставить чистую ссылку?
Комментарии
1) включить чистые ссылки на сайте
Clean URLs
/admin/settings/clean-urls
v Enabled
тогда получим:
http://site.ru/magne.....
2) на иной ресурс добавляем ссылку вместе с "http://"
Дело в том, что мне надо чтоб ссылка была без "http://site.ru/?q=" и без "http://" ссылка должнабыть такая "magnet:?xt=urn:tree:tiger:TVJKR6E3LFPSBYEJIQRMXMDBKJ47O54GMYLGUJA&xl=4336&dn=DVD.mds", что бы автоматически запускалась программа ассоциированная с таким видом ссылок
ну я б тогда создал свой формат вывода этого поля.
для этого можно просто отредактировал модуль link.
там будет функция link_field_formatter_info добавляем свой тип
'label' => t('this is my type'),
'field types' => array('link'),
),
а потом в функции link_field_formatter задаём формат вывода
/**
* код для вывода который надо, например
*/
$myurl = '<div class="my_type"><a href="'. $item['url'] .'" title="'. $item['title'] .'"></a></div> ';
return $myurl;
}
как по мне самый простой способ
Этот вопрос так и не решили? ведь в новых версиях ф-ции link_field_formatter просто нет, да и хотелось бы как-то по-человечески сделать, дабы magnet ссылки проверялись на правельность или просто выводило ссылку как она есть, без фильтрации...
Я решил это так, установил формат ввода "Full Html". Также некоторые вузивуг редакторы тоже коверкают магнет ссылки, например FCKEditor. Из этого понятно, что в формат ввода надо добавить какойто тег, и все будет работать, наверно...
ладно... тогда попробую написать что-то на базе link но публикующие только magnet ссылки
Если получиться, поделитесь пожалуйста.
Сделал криво, но оно работает, пойже можно исправить.
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'].'';
}
то ссылки должны работать