We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 9673
    • 52 Posts
    Здравствуйте, у меня появилась маленькая проблема. На сайте я использую ЧПУ, сейчас делаю на нем возможность публикации ресурсов через фронтенд. И проблема появилась с псевдонимами, мне нужно чтобы псевдоним брался из заголовка и проходил через TransAlias. Сейчас алиас у меня задан как копия pagetitle, он копирует его - но на страницу вида "domen.com/какая крутая новость" естественно зайти не получается, выдается ошибка. если я нажму в админке редактирование и сразу сохранение этого рессурса, тогда срабатывает transalias и переводит псевдоним в нормальное состояние "domen.com/kakaya-krutaya-novost.html" Вопрос, как мне сделать обработку псевдонима на этапе добавления статьи, а не так как сейчас через редактирование и сохранение в админке?
     require_once('assets/libs/docmanager/document.class.inc.php');
    
        $doc = new Document(); // создаем документ
    
        $doc->Set('parent',96); // определяем в какую папку положить
    
        $doc->Set('template','Главная страница'); // задаем шаблон
        
        $doc->Set('alias',$fields['pagetitle']);
    
        $doc->Set('pagetitle',$fields['pagetitle']); // краткое название
    
        $doc->Set('introtext',$fields['introtext']); // аннотацию
    
        $doc->Set('content',$fields['content']); // основное содержимое
    
      • 785
      • 2,113 Posts
      Что-то вроде этого
      $alias=strtolower($modx->stripAlias(trim($pagetitle)));
        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
        Статьи о MODx, регулярно новые публикации
        • 9673
        • 52 Posts
        global $modx;
        $alias=strtolower($modx->stripAlias(trim($pagetitle)));
        
            // Создания документа с описанием.
        
            require_once('assets/libs/docmanager/document.class.inc.php');
        
        
        
            $doc = new Document(); // создаем документ
        
            $doc->Set('parent',96); // определяем в какую папку положить
        
            $doc->Set('template','Главная страница'); // задаем шаблон
            
            $doc->Set('alias',$alias);
        
            $doc->Set('pagetitle',$fields['pagetitle']); // краткое название
        
            $doc->Set('introtext',$fields['introtext']); // аннотацию
        
            $doc->Set('content',$fields['content']); // основное содержимое
        

        не работает, теперь алиас поле пустое
          • 785
          • 2,113 Posts
          Я же написал "что-то вроде", надо все же немного самому подумать, откуда $pagetitle может взяться...
            Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
            Статьи о MODx, регулярно новые публикации
            • 9673
            • 52 Posts
              • 785
              • 2,113 Posts
              Quote from: filchakov at Mar 26, 2011, 10:05 AM

              pagetitle берется с чанка
              Это не так. Посмотрите, откуда записываются данные в заголовок и откуда берутся в моей команде. Наверное, они должны браться из одного и того же места.
                Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                Статьи о MODx, регулярно новые публикации
                • 9673
                • 52 Posts
                спасибо, ошибку понял
                global $modx;
                $alias=strtolower($modx->stripAlias(trim($fields['pagetitle'])));

                теперь генерируется все правильно
                  • 9673
                  • 52 Posts
                  подскажите как правильно сделать сброс кэша программно? без сброса кэша страницы которые созданы программно не видны для пользователей.

                  я пробовал
                  <?php
                  function CreateNewArticle(&$fields){
                      // Массив $fields будет содержать данные всех полей формы
                  
                  global $modx;
                  $alias=strtolower($modx->stripAlias(trim($fields['pagetitle'])));
                  
                      // Создания документа с описанием.
                  
                      require_once('assets/libs/docmanager/document.class.inc.php');
                  
                      $doc = new Document(); // создаем документ
                  
                      $doc->Set('parent',96); // определяем в какую папку положить
                  
                      $doc->Set('template','Страница объявления'); // задаем шаблон
                      
                      $doc->Set('alias',$alias);
                  
                      $doc->Set('pagetitle',$fields['pagetitle']); // краткое название
                  
                      $doc->Set('introtext',$fields['introtext']); // аннотацию
                  
                      $doc->Set('content',$fields['content']); // основное содержимое
                  
                      // Далее пойдут TV-параметры
                  
                      $doc->Set('tvavtor',$modx->getLoginUserID()); // id автора
                  	
                      $doc->Set('tvavtor',$modx->getLoginUserName()); // имя автора
                  
                      $doc->Set('tvcomplect',$fields['complect']); // комплект
                  	
                      $doc->Save(); // сохраняем
                  
                      return true; // Говорим eForm, что все в порядке.
                  
                      function clearCache() {
                      
                      $modx->clearCache();
                      
                      include_once MODX_BASE_PATH . 'manager/processors/cache_sync.class.processor.php';
                      $sync = new synccache();
                      $sync->setCachepath(MODX_BASE_PATH . "assets/cache/");
                      $sync->setReport(false);
                      $sync->emptyCache();
                  }
                  clearCache(); 
                  }
                  ?>

                  но кэш не сбрасывается, где у меня ошибка?
                    • 785
                    • 2,113 Posts
                    Все же подучите PHP, а то ничего хорошего не получится. Зачем сделана функция clearCache, если она все равно один раз вызывается? А так как код спрятан в функцию, надо в ней объявлять глобальные переменные (например, $modx). И зачем нужен $modx->clearCache, если ниже как раз и выполняется очистка. В общем, код:
                    include_once MODX_MANAGER_PATH."processors/cache_sync.class.processor.php";
                    $sync = new synccache();
                    $sync->setCachepath(MODX_BASE_PATH."assets/cache/");
                    $sync->setReport(false);
                    $sync->emptyCache();
                    должен правильно очищать, если что-то не работает, надо тестировать, искать проблемы и устранять их.
                      Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                      Статьи о MODx, регулярно новые публикации
                      • 9673
                      • 52 Posts
                      все равно не работает очистка кэша, код выглядит теперь так
                          // Далее пойдут TV-параметры
                      
                          $doc->Set('tvavtor',$modx->getLoginUserID()); // id автора
                      	
                      	$doc->Set('tvavtor',$modx->getLoginUserName()); // имя автора
                      
                      	$doc->Set('tvcomplect',$fields['complect']); // комплект
                      	
                          $doc->Save(); // сохраняем
                      
                          return true; // Говорим eForm, что все в порядке.
                         
                            include_once MODX_MANAGER_PATH."processors/cache_sync.class.processor.php";
                            $sync = new synccache();
                            $sync->setCachepath(MODX_BASE_PATH."assets/cache/");
                            $sync->setReport(false);
                            $sync->emptyCache();
                      }
                      ?>

                      страница на которой вызывается это сниппет не кэшируется, сам сниппет вызывается [! !] - тоже без кэша, в чем может быть проблема?

                      P.S. функция стоит, потому что скопировал все из документации без редактирования http://www.modx-cms.ru/dokumentatsiya/razrabotka/programmirovanie/modx-api/clearcache.html#polnaya-ochistka-kesha