Fi1osof
7 июля 2016 г., 21:29

Скрипт выборки шаблонов для проверки

Перевожу очередной сайт на смарти и меняю соответственно код всех шаблонов. А шаблонов 17 штук (наследство). Процесс был рутинный и что-то я засомневался, а вдруг где какой шаблон не так прописался и что надо бы проверить. А как проверить? Логично — открыть по одному документу каждого шаблона во фронте и посмотреть нет ли ошибок и вообще корректно ли открывается. Но документов много и по каждому идти выискивать документы по каждому шаблону не удобно. Вот написал скрипт, который делает такую выборку и сразу формирует ссылки на эти документы, по одному на каждый шаблон. Остается только кликнуть по разу каждую ссылку и посмотреть как что отображается.
ini_set('display_errors', 1); $q = $modx->newQuery('modTemplate', array( "resource.published" => 1, "resource.deleted" => 0, )); $q->innerJoin('modResource', 'resource', "resource.template = modTemplate.id"); $alias = $q->getAlias(); $q->select(array( "{$alias}.id", "uri", "templatename as name", "pagetitle", "resource.id as resource_id", "count(*) as `total`", )); $q->groupby("{$alias}.id"); // print $modx->getCount('modTemplate', $q); $base_url = $modx->getOption('base_url'); foreach($modx->getIterator('modTemplate', $q) as $object){ print "
{$object->name} ({$object->id}) / {$object->pagetitle} ({$object->resource_id}) / {$object->total} документов"
; }
К слову, если кому интересно, можете доработать скрипт так, чтобы по каждому УРЛу выполнялся CURL-запрос и проверял код ответа (200 должен быть) и был ли получен какой контент. Будет такой автоматизированный тест на наличие технических ошибок в шаблонах.
UDP: немного доработал скрипт, теперь он еще и выводит количество документов по каждому шаблону. Небольшая ревизия чтобы не было кучи шаблонов по одному документу. Получается типа вот такого:
ruFirstPage / Главная (1) / 5 документов
ruEventPage / Голоса влюблённых женщин (1113) / 803 документов
ruEvents / Выставки (13) / 4 документов
ruHystoryPage / История (14) / 1 документов

UPD: Полезная модификация скрипта: перегоняем MODX-шаблоны в Smarty, то есть код шаблона записываем в smarty-файл, а в сам MODX-шаблон прописываем вызов сниппета.
ini_set('display_errors', 1); print '
';

$old_category = 15;
$new_category = 0;
$trash_category = 16;

$q = $modx->newQuery('modTemplate', array(
  "category"  => $old_category,
));
$alias = $q->getAlias();

$q->select(array(
	"{$alias}.*",
));

$base_url = $modx->getOption('base_url');

$path = MODX_CORE_PATH . 'components/modxsite/templates/skinname/v1/tpl/';

$resource = $modx->newObject("modResource");

foreach($modx->getIterator('modTemplate', $q) as $object){

  if(!$tpl_file = $resource->cleanAlias($object->templatename)){
    print "Error. Can not create filename";
    return;
    continue;
  }
  
  $tpl_file .= '.tpl';
  
  $snippet = "[[!smarty?tpl=`tpl/{$tpl_file}`]]";
  
  $abs_path = $path . $tpl_file;
  
  if(!$fo = fopen($abs_path, 'w+')){
    
    print "Error. Can not open file {$abs_path}";
    return;
  }
  
  if(fwrite($fo, $object->content)){
    
    $copy_template = $modx->newObject("modTemplate");
    
    $copy_template->fromArray(
      $object->toArray()
    );
    
    $copy_template->fromArray(array(
      "category"  => $trash_category,
      "templatename"  => "Copy of " . $object->templatename,
    ));
    
    $object->fromArray(array(
      "content" => $snippet,
      "category"  => $new_category,
    ));
    
    if($object->save()){
      $copy_template->save();
    }
  }
  else{
    print "Error. Can not write file";
    fclose($fo);
    return;
  }
  
  fclose($fo);
  
  print "\n" . $object->templatename;
  
  // break;
}

Элементарно, Ватсон!
А, что собственно сложного в данной задаче?)
Сложного — ничего. Полезного — под случай не мало.
1й курс универа с техническим уклоном) А так я это делал еще в 8-м классе) легче самому написать, чем искать эту статью))
ИМХО: Слишком базовый уровень, даешь сложнее задачи!
Дружище, ты не забывай, что не все такие guru. Твое мнение субъективно…
Я не задачу даю, а пример. Тебе не нужно — пройди мимо. А если хочется что-то написать здесь — иди свои статьи напиши, опытом своим поделись. А так больше оффтопить не надо, и отвечать здесь больше ничего не надо. Забаню.
www.seleniumhq.org/projects/webdriver/ велосипеды это весело, но есть готовые инструменты для автоматизированного приемочного тестирования habrahabr.ru/post/248559/ — пример
Вы видимо не уловили назначения.
уловил, потому и прислал эти ссылки. С Вашим скриптом и selenium все станет полностью автоматизированно — выбираете ссылки, после — скармливаете их селениуму, он браузером проходит по ссылкам и делает скрины. И не нужно руками кликать и каждую смотреть — пролистать картинки куда быстрее + экономится время при смене шаблона. Рекомендую selenium для питона — сценарии выходят более читабельные и простые. Даже без знаний питона написать их не составит труда
Хорошо, при случае может погоняю.
Уже разик пригодилось) Спасибо!
Всегда пожалуйста!) Кстати, надо дописать немного… Еще не редко возникает потребность вычислить не используемые шаблоны. Бывает просят сайт оптимизировать, заходишь туда, там 20-30 шаблонов, при этом 50-70% из них вообще не используются. Удалять такие надо за ненадобностью.

Добавить комментарий