We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 13940
    • 11 Posts
    К сожалению, в силу слишком слабого знакомства с PHP не могу отказаться от Ditto, поэтому в аналогичной конструкции применил кешируемый вызов Jot (Пока не было разбивки на страницы, тоже вызывал Ditto — кешируемый, Jot — некешируемый). Страница кешируется.
    Итак, работающий код: http://elkipalki.net/
    Скопипастил прям из админки smiley

    1. Основной вызов Ditto с разбивкой на страницы:
    [!splitPagination? &id=`startPage`!]
    <div class="pagination wb">Страницы:  <span>[+startPage_splitPages+] </span> <span style="font-size: 90%;">(Анонсы:  [*docspp*] на странице)</span></div>
    [!Ditto? &id=`startPage` &tpl=`ditto_intro` &filter=`description,places,8|description,friends,8|template,6,2|template,17,2|template,18,2|template,19,2|template,20,2|template,21,2` &parents=`45` &depth=`2` &summarize=`[*docspp*]` &paginate=`1` &language=`russian-UTF8` &dateFormat=`%d.%m.%Y`!]
    [!splitPagination? &id=`startPage`!]
    <div class="pagination">Страницы:  <span>[+startPage_splitPages+] </span> <span style="font-size: 90%;">(Анонсы:  [*docspp*] на странице)</span></div>


    2. Чанк ditto_intro:
    <div class="fresh">
    <p class="count-comments"><span>Просмотры:</span> [[ViewCountPageHit? &id=`[+id+]`]]<br /><a href="[(site_url)][~[+id+]~]#comments">Комментарии:</a> [[Jot? &docid=`[+id+]` &action=`count-comments`]]</p>
    <h4>[+pagetitle+]</h4>
    [+introtext+]
    <p class="summary"><span class="author"><a href="[~[+parent+]~]">[[DocInfo? &id=`[+parent+]`]]</a></span> [+date+], рубрика <a href="[~[+heading+]~]">[[DocInfo? &id=`[+heading+]`]]</a> раздела [[DocParentInfo? &id=`[+heading+]`]]</p>
    <hr />
    </div>
      • 11255
      • 193 Posts
      AKots, я имею ввиду что если сниппет не предполагает дополнительных плейсхолдеров - то нельзя так решить как вы описали. Раз в Дитто такое есть - то это хорошо. Буду пробовать.
      jen, если вызвать Джот кешируемым - то количество комментариев будет закешировано.
        • 785
        • 2,113 Posts
        Так получилось, что у меня самого возникла проблема вызова одного сниппета из другого. По некоторым причинам на конкретном сайте я не вставляю в шаблон [*content*], а вызываю сниппет, который в зависимости от разных условий либо подставляет контент, либо делает другие вещи. При этом возникла проблема, если в контенте имеется вызов других сниппетов. Для ее решения я в свой сниппет добавил такие строки:
        if (strpos($myText, '[[') > -1)
        	$result.=$modx->parseDocumentSource($myText);
        else
        	$result.=$myText;
        То есть если в генерируемом тексте имеется кэшируемый вызов сниппета, он будет выполнен до того, как завершит работу мой сниппет. В случае, когда я кэширую вызов своего сниппета, результат работы другого будет в нем присутствовать. А для некэшируемых вызовов я добавил небольшой плагин, привязав его к событию OnWebPagePrerender:
        /*
         * Выполнение кэшированных вызовов сниппетов
         * автор AKots
        */
        
        $e =& $modx->event;
        switch ($e->name ) {
        	case 'OnWebPagePrerender':
        		if (strpos($modx->documentOutput, '[!') > -1) {
        			$modx->documentOutput= str_replace('[!', '[[', $modx->documentOutput);
        			$modx->documentOutput= str_replace('!]', ']]', $modx->documentOutput);
        			$modx->documentOutput= $modx->parseDocumentSource($modx->documentOutput);
        			if (strpos($modx->documentOutput, '[~') > -1) {
        				$modx->documentOutput= $modx->rewriteUrls($modx->documentOutput);
        			}
        		}
        		break ;
        	default:
        		return ;
        }
        Если после того, как все сниппеты, даже некэшируемые, уже выполнены, а в тексте остались вызовы некэшируемых сниппетов, они выполнятся. Следует отметить, что данный плагин имеет определенные ограничения, связанные с тем, что событие OnWebPagePrerender возникает несколько позже, чем хотелось бы, так что при использовании плагина надо проверить работу страниц, где используются другие плагины и сниппеты.
          Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
          Статьи о MODx, регулярно новые публикации
          • 13940
          • 11 Posts
          Quote from: Great-Antique at Feb 18, 2010, 01:59 AM

          AKots, я имею ввиду что если сниппет не предполагает дополнительных плейсхолдеров - то нельзя так решить как вы описали. Раз в Дитто такое есть - то это хорошо. Буду пробовать.
          jen, если вызвать Джот кешируемым - то количество комментариев будет закешировано.
          Great-Antique, до того, как я (на «авось») применил этот вариант, а попробовал от безысходности, я был убежден в том же, что и вы. Ссылку на сайт я привел, чтобы вы могли убедиться в результате.Не могу объяснить механизм, но кешируемый Jot в некешируемом Ditto получает результат из БД.
          AKots, спасибо за очень полезные решения!