Евгений
С нами с 18 марта 2015; Место в рейтинге пользователей: #380Нужно переименовать шаблон через API
            Приветствую.
Существует необходимость переименовать начальный шаблон посредством API. Переименование происходит, но в логах трэш получается (xPDOObject — Called set() with an invalid field name: modTemplate_mysql Object). Поскольку сам несколько далек от этого, прошу знатоков подсказать, где в коде ошибки и как он должен выглядеть в результате:
        
        
        
    Существует необходимость переименовать начальный шаблон посредством API. Переименование происходит, но в логах трэш получается (xPDOObject — Called set() with an invalid field name: modTemplate_mysql Object). Поскольку сам несколько далек от этого, прошу знатоков подсказать, где в коде ошибки и как он должен выглядеть в результате:
/** @var modTemplate $base_template */
if ($base_template = $this->modx->getObject('modTemplate', array('templatename' => 'Начальный шаблон'))) {
    $base_template->fromArray([
        'templatename' => 'BaseTemplate',
    ], '', true, true);
    $base_template->set($base_template, $attributes);
    $base_template->save();
}Спасибо.        phpStorm. Пути на локальном и удаленном сервере, возможно ли менять при синхронизации?
            Всем доброго времени суток! Прошу помощи у знатоков phpStorm.
Есть развернутый проект на локальном сервере. Необходимо его синхронизировать или просто выгрузить на удаленный сервер. Deployment настроил — все коннектится и работает. Вопрос вот в чем: возможно ли при синхронизации заставить phpStorm менять пути в файлах и как это сделать?
Т.е. к примеру в ModX есть файлы-конфиги с путями:
Кто как синхронизирует локальный и удаленный сервер при условии, что базовые пути у них разные?
Спасибо.
        
        
        
    Есть развернутый проект на локальном сервере. Необходимо его синхронизировать или просто выгрузить на удаленный сервер. Deployment настроил — все коннектится и работает. Вопрос вот в чем: возможно ли при синхронизации заставить phpStorm менять пути в файлах и как это сделать?
Т.е. к примеру в ModX есть файлы-конфиги с путями:
define('MODX_CORE_PATH', '/Volumes/Server/htdocs/site/public_html/core/');нужно, чтобы при выгрузке на сервер путь менялся на:define('MODX_CORE_PATH', '/home/site/public_html/core/');И в обратном направлении тоже.Кто как синхронизирует локальный и удаленный сервер при условии, что базовые пути у них разные?
Спасибо.
Получить и посчитать все заполненные поля из MIGX
            Прошу помощи в решении задачи: есть готовый сниппет, который считает заполненные TV-поля и затем выводит их в указанное кол-во столбцов. Необходимо переделать его под работу с MIGX.
должно быть что-то вроде
        
        
        
    <?php
//передаваемые в сниппет параметры
//id - id ресурса с которого берем нужные поля
//tvInput - id полей для проверки, через запятую
//cols_count - количество выводимых колонок
//tpl - шаблон вывода
$id = $id;
$tvInput = explode(',',$tvs);
$cols_count = $cols;
$tpl = $tpl;
if (!isset($tvInput)) { return false; } // Если не указаны TV, прекращаем выполнение кода
if (!isset($id)) { $id = $modx->resource->get('id'); } // По-умолчанию текущий ресурс
if (!isset($cols_count)) { $cols_count = 2; } // Количество колонок по-умолчанию
if (!isset($tpl)) { $tpl = 'object_params'; } // Шаблон по-умолчанию
$criteria = $modx->newQuery('modTemplateVarResource', [
              'contentid' => $id,
              'tmplvarid:IN' => $tvInput,
              'value:!=' => ''
            ]);
$docs = $modx->getCollection('modTemplateVarResource', $criteria);
//выводим по колонкам
//default_elems_at_col - количество элементов в колонке
$output = '';
$count = count($docs);
$default_elems_at_col = floor($count / $cols_count);
$continue_default = false;
/* 
  как работает:
  например: 52 элемента на 5 колонок
  $default_elems_at_col - количество элементов в колонке по умолчанию floor(52 / 5) = 10
  остается 2 элемента (52 - 50), которые необходимо распределить по колонкам, т.е.
  $real_default_elems_at_col = 11 (для первых двух колонок)
  $continue_default - переменная, чтобы прекратить лишние вычисления на итерациях, когда лишних элементов не осталось
*/
$output .= '<div class="params params_cols-' . $cols_count . '">';
for ($i = 0; $i < $cols_count; $i++) {
  if (!$continue_default) {
    $real_default_elems_at_col = $default_elems_at_col + 1;
    if ( ($real_default_elems_at_col * ($i + 1) + ($cols_count - $i - 1) * $default_elems_at_col) > $count ) {
      $real_default_elems_at_col = $default_elems_at_col;
      $continue_default = true;
    }
  } 
  $output .= '<div class="params__column">';
  for ($j = 0; $j < $real_default_elems_at_col; $j++) {
    $current_doc = current($docs)->toArray();
    $tvId = $current_doc["tmplvarid"];
    $value = $current_doc["value"];
    
    $output .= $modx->getChunk($tpl, [
                'tvId' => $tvId,
                'value' => $value
               ]);
    //если следующего элемента нет - выходим из цикла
    if (!next($docs)) {
      break;
    }
  }
  $output .= '</div>';
}
$output .= '</div>';
return $output;Т.е. вместо$criteria = $modx->newQuery('modTemplateVarResource', [
              'contentid' => $id,
              'tmplvarid:IN' => $tvInput,
              'value:!=' => ''
            ]);
$docs = $modx->getCollection('modTemplateVarResource', $criteria);нужно получить и посчитать непустые поля MIGX, думаю в этом направлении:$criteria = $modx->runSnippet('getImageList',array(
'tvname'=> $tvInput, 
'tpl'=>'@CODE: [[+name]]==[[+value]]',
'outputSeparator'=>'||',
'docid' => $id
));а вместо$tvId = $current_doc["tmplvarid"];
$value = $current_doc["value"];
$output .= $modx->getChunk($tpl, [
            'tvId' => $tvId,
            'value' => $value
           ]); должно быть что-то вроде
$tvName = $current_doc["name"];
$value = $current_doc["value"];
$output .= $modx->getChunk($tpl, [
            'tvName' => $tvName,
            'value' => $value
           ]);Спасибо.        CatalogFill + MIGX
            Доброго времени суток!
Прошу помощи в настройке catalogFill. Разбираюсь с конфигурацией. Что качается обычных полей — тут все просто и ясно. Возникла проблема с экспортом/импортом поля MIGX.
Задача и суть проблемы: у меня есть сайт со списком ресурсов (не shopkeeper), у каждого ресурса есть множество полей. Раньше это были простые TV, но скорость загрузки сайта оставляла желать лучшего (особенно страницы каталога с pdoResources). Сейчас все перевел в MIGX — создал новое поле «object_profile» с типом «migx» и в него, соответственно, добавил все остальные поля.
Подскажите, как должен выглядеть файл конфигурации, чтобы был импорт/экспорт полей из MIGX-поля (не MIGXDB) и при этом файл на выходе разбивался на столбцы? Тут у меня 2 догадки: 1) собирать конфиг на базе «migx_catalog», 2) на базе default, но тогда по-идее нужны фильтры для импорта и экспорта.
Буду признателен за ответы. Спасибо.
        
        
        
    Прошу помощи в настройке catalogFill. Разбираюсь с конфигурацией. Что качается обычных полей — тут все просто и ясно. Возникла проблема с экспортом/импортом поля MIGX.
Задача и суть проблемы: у меня есть сайт со списком ресурсов (не shopkeeper), у каждого ресурса есть множество полей. Раньше это были простые TV, но скорость загрузки сайта оставляла желать лучшего (особенно страницы каталога с pdoResources). Сейчас все перевел в MIGX — создал новое поле «object_profile» с типом «migx» и в него, соответственно, добавил все остальные поля.
Подскажите, как должен выглядеть файл конфигурации, чтобы был импорт/экспорт полей из MIGX-поля (не MIGXDB) и при этом файл на выходе разбивался на столбцы? Тут у меня 2 догадки: 1) собирать конфиг на базе «migx_catalog», 2) на базе default, но тогда по-идее нужны фильтры для импорта и экспорта.
Буду признателен за ответы. Спасибо.
Помогите допилить фильтр number в mFilter2
            Доброго времени суток! Прошу помощи у знатоков: как допилить стандартный фильтр number, чтобы выводились в том числе, страницы с пустым значением TV? Спасибо.
        
        
        
    <?php
public function filterNumber(array $requested, array $values, array $ids) {
	$matched = array();
	$min = floor(min($requested));
	$max = ceil(max($requested));
	$tmp = array_flip($ids);
	foreach ($values as $number => $resources) {
		if ($number >= $min && $number <= $max) {
			foreach ($resources as $id) {
				if (isset($tmp[$id])) {
					$matched[] = $id;
				}
			}
		}
	}
	return $matched;
}        Вывод всех используемых значений TV-поля
            Всем доброго времени суток! Подскажите, пожалуйста, каким образом можно вывести список всех используемых значений TV-поля?
Создаю выпадающий список. Нужно, чтобы в значениях option выводились значения определенного TV-поля (тип — одиночный выбор), которые используются в ресурсах с определенным родителем. Буду очень признателен за ответ.
        
        
        
    Создаю выпадающий список. Нужно, чтобы в значениях option выводились значения определенного TV-поля (тип — одиночный выбор), которые используются в ресурсах с определенным родителем. Буду очень признателен за ответ.
mFilter2 и virtualPage - Cannot declare class myCustomFilter, because the name is already in use
            Друзья, никто не сталкивался с такой проблемой: пытаюсь вывести на сайте каталог при помощи mFilter2, создал свои фильтры — все работает, но если вывожу его при помощи virtualPage — выдает следующую ошибку:
В чем может быть проблема и как ее лечить? Спасибо.
        
        
        
    Fatal error: Cannot declare class myCustomFilter, because the name is already in use in /core/components/msearch2/custom/filters/my.class.php on line 156В чем может быть проблема и как ее лечить? Спасибо.
mFilter2 не выводит полный путь к фото
            Приветствую!
Друзья, подскажите, пожалуйста, как решить проблему.
Есть собственный источник файлов в котором указан путь media/blog/

Создано TV-поле для изображения, которое использует данный источник с типом ввода «изображение».
Проблема в том, что когда вывожу этот TV через mFilter2, он не подхватывает полный путь. Через pdoResources все работает как надо.
В чем мб проблема и как ее решить?
        
        
        
    Друзья, подскажите, пожалуйста, как решить проблему.
Есть собственный источник файлов в котором указан путь media/blog/

Создано TV-поле для изображения, которое использует данный источник с типом ввода «изображение».
Проблема в том, что когда вывожу этот TV через mFilter2, он не подхватывает полный путь. Через pdoResources все работает как надо.
В чем мб проблема и как ее решить?
Нужно подкорректировать/написать пару фильтров для mFilter2
1 1
            Приветствую!
Необходимо написать несколько простых фильтров для mFilter2:
1) Фильтр для выбора дорогой и дешевой недвижимости по TV-полю «цена» (по-сути аналог boolean). При этом объекты, у которых цена не указана должны отображаться и там и там.
2) Фильтр кол-ва комнат. Задача, чтобы отображались значения «1», «2», «3», «4+». Т.е. все объекты со значением 4 и больше должны группироваться в один параметр «4+».
Цена договорная. При знании темы работы на час максимум.
Вот что имеется:
1) по дорогой и дешевой недвижимости фильтр есть, но он не отображает товары без цены:
        
        Необходимо написать несколько простых фильтров для mFilter2:
1) Фильтр для выбора дорогой и дешевой недвижимости по TV-полю «цена» (по-сути аналог boolean). При этом объекты, у которых цена не указана должны отображаться и там и там.
2) Фильтр кол-ва комнат. Задача, чтобы отображались значения «1», «2», «3», «4+». Т.е. все объекты со значением 4 и больше должны группироваться в один параметр «4+».
Цена договорная. При знании темы работы на час максимум.
Вот что имеется:
1) по дорогой и дешевой недвижимости фильтр есть, но он не отображает товары без цены:
<?php
class myCustomFilter extends mse2FiltersHandler {
  public function buildClassFilter(array $values) {
    if (count($values) < 2 && empty($this->config['showEmptyFilters'])) {
      return array();
    }
    $results = array();
    $this->modx->lexicon->load('aveo:default');
    foreach ($values as $value => $ids) {
      $chip = empty($value) || (is_numeric($value) && (int)$value <= 340000);
      $title = $chip
      ? $this->modx->lexicon('affordable')
      : $this->modx->lexicon('elite');
      if (!isset($results[$title])) {
        $results[$title] = array(
          'title' => $title,
          'value' => (int)!$chip,
          'type' => 'class',
          'resources' => $ids
        );
      }
      else {
        $results[$title]['resources'] = array_merge($results[$title]['resources'], $ids);
      }
    }
    return $this->sortFilters($results, 'class', array('name' => $name));
  }
  public function filterClass(array $requested, array $values, array $ids) {
    $matched = array();
    $tmp = array_flip($ids);
    foreach ($requested as $value) {
      foreach ($values as $k => $resources) {
        $chip = empty($k) || (is_numeric($k) && (int)$k <= 340000);
        if ((empty($value) && !$chip) || (!empty($value) && $chip)) {
          continue;
        }
        foreach ($resources as $id) {
          if (isset($tmp[$id])) {
            $matched[] = $id;
          }
        }
      }
    }
    return $matched;
  }2) По фильтру кол-ва комнат сейчас группируются они так:public function buildBedroomsFilter(array $values) {
    if (count($values) < 2 && empty($this->config['showEmptyFilters'])) {
      return array();
    }
    $results = array();
    foreach ($values as $value => $ids) {
      $many = (is_numeric($value) && (int)$value >= 4);
      $title = !$many ? $value : '4+';
      $value = !$many ? $value : '4';
      if (!isset($results[$title])) {
        $results[$title] = array(
          'title' => $title,
          'value' => $value,
          'type' => 'bedrooms',
          'resources' => $ids
        );
      }
      else {
        $results[$title]['resources'] = array_merge($results[$title]['resources'], $ids);
      }
    }
    return $this->sortFilters($results, 'bedrooms', array('name' => $name));
}        mFilter2: как вывести фильтр с пустым значением TV?
            Всем привет!
Друзья, подскажите, пожалуйста решение задачи: создал свой фильтр для вывода товаров (обычные страницы с TV), который переключает дорогие либо дешевые товары (дороже 340000 или дешевле). За основу брал метод boolean. Как сделать, чтобы и в случае дешевых и в случае дорогих товаров выводились так же товары без цены?
        
        
        
    Друзья, подскажите, пожалуйста решение задачи: создал свой фильтр для вывода товаров (обычные страницы с TV), который переключает дорогие либо дешевые товары (дороже 340000 или дешевле). За основу брал метод boolean. Как сделать, чтобы и в случае дешевых и в случае дорогих товаров выводились так же товары без цены?
<?php
class myCustomFilter extends mse2FiltersHandler {
  public function buildClassFilter(array $values) {
    if (count($values) < 2 && empty($this->config['showEmptyFilters'])) {
      return array();
    }
    $results = array();
    $this->modx->lexicon->load('aveo:default');
    foreach ($values as $value => $ids) {
      $chip = empty($value) || (is_numeric($value) && (int)$value <= 340000);
      $title = $chip
      ? $this->modx->lexicon('affordable')
      : $this->modx->lexicon('elite');
      if (!isset($results[$value])) {
        $results[$value] = array(
          'title' => $title,
          'value' => (int)!$chip,
          'type' => 'class',
          'resources' => array()
        );
      }
      foreach ($ids as $id) {
        $results[$value]['resources'][] = $id;
      }
    }
    ksort($results);
    return $results;
  }
  public function filterClass(array $requested, array $values, array $ids) {
    $matched = array();
    $value = $requested[0];
    $tmp = array_flip($ids);
    foreach ($requested as $value) {
      foreach ($values as $k => $resources) {
        $chip = empty($k) || (is_numeric($k) && (int)$k <= 340000);
        if ((empty($value) && !$chip) || (!empty($value) && $chip)) {
          continue;
        }
        foreach ($resources as $id) {
          if (isset($tmp[$id])) {
            $matched[] = $id;
          }
        }
      }
    }
    return $matched;
  }
}Заранее благодарен за ваши ответы.