2010-12-15 1 views
1

Есть ли модификатор smarty, который добавит метки привязки к ссылкам. напримерSmarty Modifier - Включите ссылки в ссылках

$smarty->assign('mytext','This is my text with a http://www.link.com'); 

{$mytext|link} 

, который будет отображаться,

This is my text with a <a href='http://www.link.com'>http://www.link.com</a> 

ответ

3

Я создал этот модификатор, кажется, работает очень хорошо. Я думаю, что самым большим улучшением может быть регулярное выражение.

<?php 
/** 
* Smarty plugin 
* @package Smarty 
* @subpackage PluginsModifier 
*/ 

/** 
* Smarty link_urls plugin 
* 
* Type:  modifier<br> 
* Name:  link_urls<br> 
* Purpose: performs a regex and replaces any url's with links containing themselves as the text 
* This could be improved by using a better regex. 
* And maybe it would be better for usability if the http:// was cut off the front? 
* @author Andrew 
* @return string 
*/ 

function smarty_modifier_link_urls($string) 
{ 
    $linkedString = preg_replace_callback("/\b(https?):\/\/([-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]*)\b/i", 
           create_function(
           '$matches', 
           'return "<a href=\'".($matches[0])."\'>".($matches[0])."</a>";' 
           ),$string); 

    return $linkedString; 
} 

?> 
+1

Вы можете просто вернуть значение непосредственно из функции `preg_replace_callback`, это избавит вас от установки дополнительной переменной. – RobertPitt 2011-02-10 18:02:43

0

Также вы можете использовать Smarty переменной Модификатор "regex_replace":

{$variable|regex_replace:"/\b((https?):\/\/([-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|]*))\b/i":"<a href='$1' target='_blank'>$3</a>"} 
1

Попробуйте это решение его работы для всех URLS (HTTPS, HTTP и WWW)

{$customer.description|regex_replace:" @((([[:alnum:]]+)://|www\.)([^[:space:]]*)([[:alnum:]#?/&=]))@": 
" <a href=\"\\1\" target=\"_blank\" >\\1</a>"} 
+0

Это настолько странное решение, но оно действительно работает: D – Erikas 2017-08-12 14:45:54

Смежные вопросы