We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 27605
    • 19 Posts
    Как реализовать фрагмент скрытого текста (или тэг hide) на странице, чтобы текст могли видеть только зарегистрированные пользователи? (MODx Evolution 1.0.2)
      • 29487
      • 385 Posts
      //<?php
      /**
       * HideContent
       *
       * @category 	plugin
       * @version 	1.0
       * @license 	http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL)
       * @author      Valyan
       * @internal	@properties
       * @internal	@events OnWebPagePrerender 
       * @internal	@modx_category Login
       */
       
      function checkHide($m){
      	global $modx;
      	$parametrs = $m[1];
      	$content = $m[2];
      	preg_match ( '/groups\s*=\s*`([^`]*)`/is'  , $parametrs, $groups);
      	preg_match ( '/alternative\s*=\s*`([^`]*)`/is'  , $parametrs, $alternative);
      	if (empty($groups) && $modx->userLoggedIn()) {return $content;} //Temus
      	$groups = explode(",", $groups[1]);
      	if ($modx->isMemberOfWebGroup($groups)){
      		return $content;
      	}else{
      		if (empty($alternative)){
      			return '';  
      		}else{
      			$alternative = $alternative[1];
      			if (strlen($alternative)<200){
      				if ($content = $modx->getChunk($alternative)){
      					return $content;
      				}
      			}
      			return $alternative;
      		} 
      	}
      }
      
      $e = &$modx->Event; 
      switch ($e->name) { 
      	case "OnWebPagePrerender":
      		$content = $modx->documentOutput;
      		while($content0 != $content = preg_replace_callback('/{hidecontent([^}]*)}  ([^{}]*)  {\/hidecontent}/xs', "checkHide", $content0 = $content));
      		$modx->documentOutput = $content;
      	break;
      }
      

      Плагин HideContent на событие OnWebPagePrerender.
      Прячет определенную часть контента от неавторизированных пользователей.
      Примеры использования:
      {hidecontent}hidden text{/hidecontent}
      {hidecontent groups=`Registered Users`}hidden text{/hidecontent}
      {hidecontent alternative=`You must be registered, in order to see the hidden text`}hidden text{/hidecontent}
      

      [ed. note: Temus last edited this post 14 years, 7 months ago.]
        • 26883
        • 137 Posts
        А я использую сниппет
        <?php
        # ShaggyDoc 08.11.2009
        # 
        #   [!ru_ChunkForLoggedUser? &chunk=`ForLoggedOnly`!] 
        #
        if (!isset ($chunk)) {return '';}
        $output = isset ($chunk) ? $modx->getChunk($chunk) : '';
        if ($m = $modx->insideManager()) {return $output;}
        $username = $modx->getLoginUserName();
         if ($username == '') {$output = '';}
        return $output;
        ?>
        
          • 2371
          • 29 Posts
          Как организовать, за счёт HideContent плагина, отображение скрытого текста для менеджера.

          Лучше всего для этих целей подходит сниппет к PHX, а HideContent оставить в покое, и так:

          Название сниппета: phx:loggedIn
          Описание: Скрытие участка сайта - [+phx:loggedIn:is=`1`:then=`Привет менеджер!`:else=`Всем привет!`+]
          <?php
          global $modx;
          if(isset ($_SESSION['mgrValidated'])){
              return true;
          }
          else{
              return false;
          }
          ?>


          Минус в том, что этот способ не подходит для кэшируемых страниц, делать все страницы не кешируемыми не вариант...
          Добавление $modx->clearCache() открывает скрытый участок для всех...

          Вывод: в быстротечном потоке времени не получается настроить пользовательскую визуальную среду и для менеджеров, эх
            • 2371
            • 29 Posts
            Дороботка плагина

            if ($modx->isMemberOfWebGroup($groups)){

            следует заменить на:
            if ( $modx->isMemberOfWebGroup($groups) | isset ($_SESSION['mgrValidated']) ){


            В противном случае ограничение на просмотр действует и на менеджеров.

            В итоге:
            //<?php
            /**
             * HideContent
             *
             * @category    plugin
             * @version     1.0
             * @license     http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL)
             * @author      Valyan
             * @internal    @properties
             * @internal    @events OnWebPagePrerender 
             * @internal    @modx_category Login
             */
             
            function checkHide($m){
                global $modx;
                $parametrs = $m[1];
                $content = $m[2];
                preg_match ( '/groups\s*=\s*`([^`]*)`/is'  , $parametrs, $groups);
                preg_match ( '/alternative\s*=\s*`([^`]*)`/is'  , $parametrs, $alternative);
                if (empty($groups) && $modx->userLoggedIn()) {return $content;} //Temus
                $groups = explode(",", $groups[1]);
                if ( $modx->isMemberOfWebGroup($groups) | isset ($_SESSION['mgrValidated']) ){
                    return $content;
                }else{
                    if (empty($alternative)){
                        return '';  
                    }else{
                        $alternative = $alternative[1];
                        if (strlen($alternative)<200){
                            if ($content = $modx->getChunk($alternative)){
                                return $content;
                            }
                        }
                        return $alternative;
                    } 
                }
            }
            
            $e = &$modx->Event; 
            switch ($e->name) { 
                case "OnWebPagePrerender":
                    $content = $modx->documentOutput;
                    while($content0 != $content = preg_replace_callback('/{hidecontent([^}]*)}  ([^{}]*)  {\/hidecontent}/xs', "checkHide", $content0 = $content));
                    $modx->documentOutput = $content;
                break;
            }


            Соответственно теперь можно избавиться от сниппета phx:loggedIn и скрывать следующим образом:
            {hidecontent groups=`Administrators`}Немного скрытности не повредит, пока что, не правда ли?{/hidecontent}


            При особом желании можно доработать и для групп менеджеров.



            Трюк ИКС

            [+phx:if=`{hidecontent}12{/hidecontent}`:is=`12`:then=`Привет менеджер!`:else=`Привет всем!`+]


            ... нет, этот трюк не работает, видимо из-за того что плагин phx стартует раньше чем hidecontent.

            Замучился. [ed. note: atomoc last edited this post 14 years, 5 months ago.]