Расширяем возможности макроса content redirect — различия между версиями
Kalexey (обсуждение | вклад) (Новая страница: « category:Написание кастомных макросов <p> '''Задача''': </p> <p> Расширить возможности макроса conte…») |
Mad grant (обсуждение | вклад) |
||
(не показаны 4 промежуточные версии 1 участника) | |||
Строка 1: | Строка 1: | ||
+ | [[category:Написание кастомных макросов]] | ||
+ | [[category:Верстка в XSLT]] | ||
+ | [[category:Верстка в TPL]] | ||
+ | '''Актуально для версии 2.9''' | ||
− | |||
<p> | <p> | ||
'''Задача''': | '''Задача''': | ||
Строка 12: | Строка 15: | ||
<p> | <p> | ||
Данные возможности можно реализовать с помощью небольшого javascript скрипта. Его мы и будем возвращать в макросе. Макрос назовём "redirectEx". Текст макроса размещаем в файле "/classes/modules/content/__custom.php", сразу после строки "//TODO: Write your macroses here". | Данные возможности можно реализовать с помощью небольшого javascript скрипта. Его мы и будем возвращать в макросе. Макрос назовём "redirectEx". Текст макроса размещаем в файле "/classes/modules/content/__custom.php", сразу после строки "//TODO: Write your macroses here". | ||
+ | </p> | ||
+ | <p style="text-align: right"> | ||
+ | '''Листинг 1. Код макроса''' | ||
</p> | </p> | ||
<source lang="php"> | <source lang="php"> | ||
Строка 22: | Строка 28: | ||
при отключёном javascript эта опция макроса также не будет работать. | при отключёном javascript эта опция макроса также не будет работать. | ||
@param | @param | ||
− | $url - URL для редиректа | + | String $url - URL для редиректа |
@param | @param | ||
− | $delay - задержка в милисекундах (0 по умолчанию) | + | Integer $delay - задержка в милисекундах (0 по умолчанию) |
@param | @param | ||
− | $new_window - открыть в новом окне? (false по умолчанию) | + | Boolean $new_window - открыть в новом окне? (false по умолчанию) |
@return | @return | ||
Текст скрипта для редиректа | Текст скрипта для редиректа | ||
Строка 56: | Строка 62: | ||
<p> | <p> | ||
Также нужно задать разрешения для макроса. Создаём в той же папке файл "permissions.custom.php" и в нём настраиваем разрешения: | Также нужно задать разрешения для макроса. Создаём в той же папке файл "permissions.custom.php" и в нём настраиваем разрешения: | ||
+ | </p> | ||
+ | <p style="text-align: right"> | ||
+ | '''Листинг 2. Установка разрешений''' | ||
</p> | </p> | ||
<source lang="php"> | <source lang="php"> | ||
Строка 74: | Строка 83: | ||
</table> | </table> | ||
<p> | <p> | ||
− | + | Примеры использования макроса: | |
+ | </p> | ||
+ | <p style="text-align: right"> | ||
+ | '''Листинг 3. Использование макроса в TPL''' | ||
</p> | </p> | ||
<source lang="html4strict"> | <source lang="html4strict"> | ||
Строка 80: | Строка 92: | ||
... | ... | ||
− | %content redirectEx('http://www. | + | %content redirectEx('http://www.umi-cms.ru', 2000, 1)% |
+ | |||
+ | ... | ||
+ | </head> | ||
+ | </source> | ||
+ | <p style="text-align: right"> | ||
+ | '''Листинг 4. Использование макроса в XSLT''' | ||
+ | </p> | ||
+ | <source lang="html4strict"> | ||
+ | <head> | ||
+ | ... | ||
+ | |||
+ | <xsl:value-of select="document('udata://content/redirectEx/(http://www.umi-cms.ru)/2000/1/')/udata" disable-output-escaping="yes" /> | ||
... | ... | ||
Строка 86: | Строка 110: | ||
</source> | </source> | ||
<p> | <p> | ||
− | В | + | В примере редирект будет произведён через 2 секунды и URL будет открыт в новой вкладке. |
+ | </p> |
Текущая версия на 11:53, 5 июня 2013
Актуально для версии 2.9
Задача:
Расширить возможности макроса content redirect(): добавить возможность редиректа с задержкой и открытием URL в новом окне/вкладке.
Решение:
Данные возможности можно реализовать с помощью небольшого javascript скрипта. Его мы и будем возвращать в макросе. Макрос назовём "redirectEx". Текст макроса размещаем в файле "/classes/modules/content/__custom.php", сразу после строки "//TODO: Write your macroses here".
Листинг 1. Код макроса
/*
@title
Макрос совершает редирект с помощью javascript на указанный URL с возмжностью
задержки и открытия URL в новом окне. Если у пользоваеля отключён
javascript, то применяется тег meta.
Примечание: Т.к. в теге meta нет опции для открытия URL в новом окне, то
при отключёном javascript эта опция макроса также не будет работать.
@param
String $url - URL для редиректа
@param
Integer $delay - задержка в милисекундах (0 по умолчанию)
@param
Boolean $new_window - открыть в новом окне? (false по умолчанию)
@return
Текст скрипта для редиректа
*/
public function redirectEx($url = "", $delay = 0, $new_window = false) {
if(isset($url)) {
$src = '';
if($new_window == false) {
$src = "window.location.href='".$url."'";
} else {
$src = "window.open('".$url."')";
}
$script = '';
$noscript = '';
if($delay == 0) {
$script = '<script type="text/javascript">'.$src.'</script>';
$noscript = '<noscript><meta http-equiv="refresh" content="url='.$url.'"></noscript>';
} else {
$script = '<script type="text/javascript">window.setTimeout("'.$src.'", '.$delay.');</script>';
$noscript = '<noscript><meta http-equiv="refresh" content="'.($delay/1000).'; url='.$url.'"></noscript>';
}
$result = $script.$noscript;
return $result;
}
}
Также нужно задать разрешения для макроса. Создаём в той же папке файл "permissions.custom.php" и в нём настраиваем разрешения:
Листинг 2. Установка разрешений
$permissions = Array(
'content' => Array('redirectEx')
);
Важно.
Поскольку в случае отключённого javascript используется тег meta, необходимо размещать данный макрос между тегами <head> и </head>. |
Примеры использования макроса:
Листинг 3. Использование макроса в TPL
<head>
...
%content redirectEx('http://www.umi-cms.ru', 2000, 1)%
...
</head>
Листинг 4. Использование макроса в XSLT
<head>
...
<xsl:value-of select="document('udata://content/redirectEx/(http://www.umi-cms.ru)/2000/1/')/udata" disable-output-escaping="yes" />
...
</head>
В примере редирект будет произведён через 2 секунды и URL будет открыт в новой вкладке.