We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 12736
    • 259 Posts
    день добрый.

    Вопроса собственно два и оба ламерских undecided.

    1)Могу ли я в вызове одного сниппета в качестве параметра использовать вызов другого сниппета? Я понял, что вроде как это возможно, но нигде не могу найти информации как это правильно делать? Могу ли я делать скажем как-то так:
    [!Ditto? parents=`16`&depth=`1`&tpl=`ditto_tab`&display=`16` &filter=`tvMy,@EVAL return $modx->runSnippet(’MySnippet’);,1`!] ?

    2) Как правильно в теле одного сниппета вызвать другой? Через MODx API?
    $modx->runSnippet(’MySnippet’);
    Если так - то как в этом случае передать параметры сниппету MySnippet?

    Не прошу подробного ответа, а прошу только ссылку на ту часть документации где эти вопросы описаны (сам пока не нашел), чтобы уж раз и на всегда разобраться что в чем как вызывается.
    Заранее спасибо
      • 12736
      • 259 Posts
      По второму вопросу ура нашел. Вот здесь: http://wiki.modxcms.com/index.php/API:runSnippet
      В случае вызова сниппета в сниппете делать надо так (на примере вызова Ditto из MySnippet):

      код MySnippet

      //создаем масив параметров
      $params[’parents’] = ’16’;
      $params[’depth’] = ’1’;
      $params[’tpl’]=’ditto_tab’;
      и тд-тп

      //вызываем Ditto
      $html = $modx->runSnippet(’Ditto’, $params);

      return $html;

      Ну и в шаблоне вызываем [!MySnippet!]

      Первый вопрос пока остается открытый

        • 16239
        • 49 Posts
        Quote from: ikarushka at May 02, 2008, 08:03 AM

        день добрый.

        Вопроса собственно два и оба ламерских undecided.

        1)Могу ли я в вызове одного сниппета в качестве параметра использовать вызов другого сниппета? Я понял, что вроде как это возможно, но нигде не могу найти информации как это правильно делать? Могу ли я делать скажем как-то так:
        [!Ditto? parents=`16`&depth=`1`&tpl=`ditto_tab`&display=`16` &filter=`tvMy,@EVAL return $modx->runSnippet(’MySnippet’);,1`!] ?

        2) Как правильно в теле одного сниппета вызвать другой? Через MODx API?
        $modx->runSnippet(’MySnippet’);
        Если так - то как в этом случае передать параметры сниппету MySnippet?

        Не прошу подробного ответа, а прошу только ссылку на ту часть документации где эти вопросы описаны (сам пока не нашел), чтобы уж раз и на всегда разобраться что в чем как вызывается.
        Заранее спасибо

        Насколько я знаю вызывается просто, в качестве примера возьмите элементарный вейфайндер. Просто внутренний сниппет нужно вызывать через двойные скобки
        [!Wayfinder? &start=`[[UltimateParent]]`!]
          • 12736
          • 259 Posts
          koshaque, спасибо больше - не знал об этом.
            • 785
            • 2,113 Posts
            Quote from: koshaque at May 08, 2008, 06:46 AM

            [!Wayfinder? &start=`[[UltimateParent]]`!]
            Не всегда оправдано отключение кэширования для внешнего сниппета. Иногда лучше написать свой сниппет, который реализует нужные вызовы, и сделать его кэшируемым.
            Если кто-то знает, как вызвать в шаблоне кэшируемый сниппет параметром другого кэшируемого сниппета, был бы рад об этом услышать.
              Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
              Статьи о MODx, регулярно новые публикации
              • 22532
              • 349 Posts
              а можно ли как то внутри кешируемого сниппета [[MSearch]]
              Вызвать дитто некешируемым ?

              щас я вызываю так
              return $modx->runSnippet("Ditto", $params);
              может можно добавить какой нибудь необязательный параметр чтобы это поправить?

              просто у меня небольшая проблемка с передачей параметров к дитто
              в сниппете строится параметр filter который надо закешировать
              но если я просто напишу [[MSearch]], то неверно будет работать пагинация

              если не лень разбираться в коде то вот весь код сниппета
              <?php
              //give params
              $country = $_POST['country'];
              $place = $_POST['place'];
              $types=$_POST['types'];
              $num_room=$_POST['num_room'];
              $price=$_POST['price'];
              $size=$_POST['size'];
              $data_is_send=$_POST['data_is_send'];
              $start=$_GET['cat_start'];
              $country_id = $_GET['country_id'];
              
              //setup value
              echo "<script type='text/javascript'>$(function(){";
              if ( $num_room!="" ) echo "$('#num_room').attr('value',".$num_room.");";
              echo "});</script>";
              
              //general directory
              $main = $modx->runSnippet("UltimateParent", array("topLevel" => "1") );
              if( $country != 0 && $country != "" ) {
               if( $place != 0 ) { $parents = $place; }
               else { $parents = $country; }
              }
              else {
              	if ( $country_id == "" ) {
              		if ( $country != "" ) { $parents = $main; }
              		else {
               			$query = mysql_query( "SELECT * FROM modx_site_content WHERE parent=".$main );
              			$queryMass = mysql_fetch_array($query);
              			$parents = $queryMass['id'];
              		}
              	}
              	else { $parents=$country_id; }
              }
              $params['parents'] = $parents;
              
              //initialize params
              $params['randomize'] = "0";
              $params['paginate'] = "1";
              $params['show'] = "6";
              $params['summarize'] = "6";
              $params['hideFolders'] = "1";
              $params['id'] = "cat";
              $params['sortDir'] = "DESC";
              $params['depth'] = "4";
              $params['paginateSplitterCharacter'] = "|";
              $params['tpl'] = "itemcatalog";
              $params['noResults'] = "Sorry";
              
              //Filter for search
              $delim=''; $params['filter']='';
              if( $types!="0" && $types!="" ) { $params['filter'] .= "tvtypes,".$types.",1"; $delim='|'; }
              if( $num_room!="" ) { $params['filter'] .= $delim."tvnum_room,".$num_room.",1"; $delim='|'; }
              if( $price!="0" && $price!="" ) {
              	$params['filter'] .= $delim."tvprice,".$price.",";
              	if($price<=5000000) { $params['filter'] .= "5"; } else { $params['filter'] .= "6"; }
              	$delim='|';
              }
              
              //print total
              if( ($data_is_send == "1") || ($start != "") ) echo "<dl style='clear: both; margin:0 ;padding:0;'><b>Найдено: [+total+] объекта(ов)</b></dl>";
              
              //run ditto
              return $modx->runSnippet("Ditto", $params);
              ?>