Расширяем возможности макроса content redirect — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
 
(не показаны 2 промежуточные версии 1 участника)
Строка 1: Строка 1:
 
  [[category:Написание кастомных макросов]]
 
  [[category:Написание кастомных макросов]]
 +
[[category:Верстка в XSLT]]
 +
[[category:Верстка в TPL]]
 +
'''Актуально для версии 2.9'''
 +
 
<p>
 
<p>
 
'''Задача''':
 
'''Задача''':
Строка 11: Строка 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">
Строка 21: Строка 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
 
       Текст скрипта для редиректа
 
       Текст скрипта для редиректа
Строка 55: Строка 62:
 
<p>
 
<p>
 
Также нужно задать разрешения для макроса. Создаём в той же папке файл "permissions.custom.php" и в нём настраиваем разрешения:
 
Также нужно задать разрешения для макроса. Создаём в той же папке файл "permissions.custom.php" и в нём настраиваем разрешения:
 +
</p>
 +
<p style="text-align: right">
 +
'''Листинг 2. Установка разрешений'''
 
</p>
 
</p>
 
<source lang="php">
 
<source lang="php">
Строка 73: Строка 83:
 
</table>
 
</table>
 
<p>
 
<p>
Присмер использования макроса в TPL шаблоне:
+
Примеры использования макроса:
 +
</p>
 +
<p style="text-align: right">
 +
'''Листинг 3. Использование макроса в TPL'''
 +
</p>
 +
<source lang="html4strict">
 +
  <head>
 +
    ...
 +
 
 +
    %content redirectEx('http://www.umi-cms.ru', 2000, 1)%
 +
 
 +
    ...
 +
  </head>
 +
</source>
 +
<p style="text-align: right">
 +
'''Листинг 4. Использование макроса в XSLT'''
 
</p>
 
</p>
 
<source lang="html4strict">
 
<source lang="html4strict">
Строка 79: Строка 104:
 
     ...
 
     ...
  
     %content redirectEx('http://www.google.ru', 2000, 1)%
+
     <xsl:value-of select="document('udata://content/redirectEx/(http://www.umi-cms.ru)/2000/1/')/udata" disable-output-escaping="yes" />
  
 
     ...
 
     ...
Строка 86: Строка 111:
 
<p>
 
<p>
 
В примере редирект будет произведён через 2 секунды и URL будет открыт в новой вкладке.
 
В примере редирект будет произведён через 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 будет открыт в новой вкладке.