Олег

Олег

С нами с 31 октября 2016; Место в рейтинге пользователей: #87

Использование @INLINE чанков в вызове сниппета

Доброго вечера, форумчане!
Хочу попробовать выпустить свое дополнение ради интереса — ничего сложного, немного измененная болванка modextra =)
Возник вопрос — как в вызове сниппета использовать INLINE чанки?

При использовании такой конструкции корректно берется чанк из настроек, также нормально берется чанк, указанный в вызове сниппета.
return $modx->getChunk($tplOuter, array('output' => $output));
При указании в вызове: &tplOuter=`@INLINE [[+output]]`- не выводится ничего.
Как я понимаю — getChunk() пытается найти чанк с таким названием и буксует.

Как это обходится, подскажите, пожалуйста! Видел, что постоянно применяется в разных сниппетах, но откопать вариант пока не смог.
Олег
05 апреля 2017, 16:15
modx.pro
1 309
0

Импорт цветов в minishop2 из CSV

Приветствую, комрады.
Неоднократно поднималась тема импорта цветов в minishop2 из csv, обычно проблема — не импортируются цвета, но проблема обсосанная со всех сторон и все давно знают, как это поправить.

В данном случае столкнулся с другой проблемой — цвета импортируются, при открытии товара показываются в карточке, но не выводятся через msoption — на выходе получаю tplEmpty.

Методом научного тыка было выяснено, что цвета начинают выводиться только после сохранения товара из админки.

Попытался решить проблему при помощи сниппета:

<?php
$results = $modx->getCollection('msProduct');
foreach ($results as $res)
{
    $res->save();
}
Но результат если и был, то обнаружить его не удалось — цвета выводятся только у тех товаров, для которых нажали ctrl+s в админке.

Вызывать сниппет без кэширования безусловно пробовал, проблему не решило.

P.S
Версия miniShop 2.2.0
Олег
15 марта 2017, 13:46
modx.pro
764
0

Параметр &where

Всем привет!
Похоже предыдущий вопрос был плохо сформулирован, ответов нет. Попробую проще:

Есть вызов ms2gallery

[[!ms2gallery?
                    &tpl=`tpl.tabs_photo`
                    &limit=`0`
                    &resources=`[[*parent]]`
                    &showLog=`1`
                ]]
Есть SQL запрос, который полностью удовлетворяет моим условиям:
SELECT *  FROM `ms2_resource_files` WHERE (`add` NOT LIKE '%65%' AND `add` NOT LIKE '') OR `add` IS NULL
Как добавить параметр where, чтобы получить тот же результат?

Ссылка на пример синтаксиса, в котором можно писать чистое SQL условие

Пытаюсь добавить для теста такое условие: &where=`[«File.add = 65»]`
Но при любом содержании перед моим условием появляется 0= и все условия не работают.
0.0006981: Added where condition: File.parent=0, File.active=1, 0=File.add = 65, modResource.id:IN(65)

С синтаксисом, в котором используются фигурные скобки пока не получается поставить такие же условия выборки.
Олег
14 марта 2017, 08:50
modx.pro
3
3 235
0

Составление параметра where

Всем доброго времени суток!
Давно бывали проблемы с параметром &where — возможно несколько разных синтаксисов, нигде толком не описано, как составлять запросы.

Сейчас возникла странная задача — у родительского ресурса в галерее находятся фотографии, которые выводятся на дочерних страницах. Но некоторые из фотографий нужно прятать на разных страницах.
Решил добавлять список страниц в свойство «дополнительно» фотографии.

В целом вызов получается такой:

[[!ms2gallery?
                    &tpl=`tpl.tabs_photo`
                    &limit=`0`
                    &resources=`[[*parent]]`
                    &where=`["65 IN File.add"]`
                    &showLog=`1`
                ]]
В логе:

0.0007219: Added where condition: File.parent=0, File.active=1, 0=65 IN File.add, modResource.id:IN(65)
Откуда берется «0=» перед пользовательским условием?

В целом на мой взгляд условие должно выглядеть так:

&where=`["File.add LIKE %[[*id]]% "]`
Но к такому виду привести не получается.
Олег
13 марта 2017, 13:54
modx.pro
693
+1

Применение первого фильтра по умолчанию в mFilter

Доброго времени суток!
Знает ли кто-нибудь, как по умолчанию применять первое значение из фильтра?
То есть выводится список значений, при клике по каждому из них изменяется список доступных товаров.
Как можно сделать, чтобы первый пункт был по-умолчанию отмечен и давалась выборка по этому пункту?

Пока приходит в голову только такой вариант — вклиниться в mfilter и там, где выполняется проверка на get параметры вставить свое условие — если параметры пустые, то передать в фильтр свои значения.

UPD:
Пока ждал ответов — сам решил :)
Решение под катом.
Олег
13 февраля 2017, 08:49
modx.pro
2
1 333
0

Настройка своих фильтров в mFilter2

Доброго времени суток!
Возникла нужда сделать свой тип фильтра для товаров…
В админке два поля: покрытие, цвет.
Для каждого товара может быть только одно покрытие и один цвет.

В создании поля не было ничего сложного, трудности появились именно при формировании фильтра:
Цвета должны группироваться по покрытию, то есть покрытие 1 — список цветов, покрытие 2 — список цветов.

Внимательно прочитал
docs.modx.pro/components/msearch2/extension/components/msearch2/the-extension/example-of-filtering-products
docs.modx.pro/components/msearch2/extension/components/msearch2/the-extension/filtering-methods

Подключил кастомный файл фильтров, написал свои функцииget, build, filter, но с некоторыми проблемами не смог разобраться:
Олег
09 февраля 2017, 10:21
modx.pro
1 754
0

Параметр &tpl у pdoResources

Салют!
Потихоньку копаюсь в api, при написании сниппета потребовалась возможность указывать для него &tpl.
Без проблем указываются отдельно — название существующего чанка или создание чанка прямо из сниппета…

существующий чанк
$modx->getChunk('WelcomeChunk',array(
   'name' => 'John',
));
Создание нового чанка
$tpl = 'Hello, my name is [[+name]]';
 
$props = array('name' => 'Bob');
 
$uniqid = uniqid();
$chunk = $modx->newObject('modChunk', array('name' => "{tmp}-{$uniqid}"));
$chunk->setCacheable(false);
 
$output = $chunk->process($props, $tpl);
Но как это совместить?
Очень удобно сделано в pdoResources, когда можно указать чанк или прописать его через @INLINE, @CODE, @FILE итд
Но самого механизма реализации не нашел, может кто-нибудь подсказать, как это делается?

UPD:
Разобрался, нужно было использовать getChunk не от modx, а от pdoTools, он все хорошо кушает :)
Олег
06 февраля 2017, 12:45
modx.pro
968
+1

Передача параметров в сниппет

Доброго вечера всем, кто увидит этот пост :)
Возник такой вопрос — при вызове сниппета ms2Gallery указываю для него параметры… Есть ли какой-то способ получения этих параметров внутри mytpl без модификации сниппета ms2Gallery?
[[!ms2Gallery?&tags=`tag1`&tpl=`mytpl`]]
Конкретно в данной ситуации нужно получить список тегов, с которыми вызывается сниппет.
Олег
30 января 2017, 15:53
modx.pro
1
1 463
0

Фильтрация фотографий в карточке товара

Всем доброго времени суток!
Никто не сталкивался с фильтрацией фотографий ms2gallery по тегам?
Суть такая: у товара должно быть множество фотографий, нужна возможность назначать фотографии цвет и при клике по нужному цвету в списке цветов отображать фотографии с нужным цветом.

На данный момент вижу три пути:
1) Использовать mfilter2 приспособив теги для фильтрации (самый сложный вариант на мой взгляд).
2) Вывести все фотографии указав при вызове галереи &getTags — после чего с помощью js скрывать/отображать нужные. (самый простой и безотказный вариант).
3) Использовать модификации товара — тогда можно попробовать реализовать с mfilter или крутить варианты без него (их много).
Пока самый туманный вариант, еще не представляю, как совмещать mfilter с модификациями.

Какой вариант лучше попробовать?
Или, быть может, кто-то знает другие способы?

Прикрепил конечный вид карточки товара, чтобы было проще представить.
Олег
26 января 2017, 08:42
modx.pro
1 133
0

Проблемы с TV при запуске pdoResources в сниппете.

Всем, кто прочитает доброго здравия!

Передо мной встала такая задача:
В категории сделать вывод дочерних категорий вкладками, в которых будут лежать товары этой дочерней категории.
Чтобы вручную не прописывать это каждый раз — решил сделать сниппет под это дело, сам сниппет:

<?php
//выборка дочерних элементов
$q = $modx->newQuery('modResource');
$q->where(array(
	'parent' => $modx->resource->id
));
$q->select(array(
   'modResource.pagetitle
   ,modResource.id
   ,modResource.menuindex'
));
$q->sortby('menuindex', 'ASC');
$q->limit(10); 

$q->prepare();
$q->stmt->execute();

$result = $q->stmt->fetchAll(PDO::FETCH_ASSOC);

//если результат положительный выполняем:
if (count($result)) { 
//выводим названия вкладок
    $output = '<div class="tabs notChanged"> <ul class="tabs__caption">';
    foreach ($result as $res) {
        $output .= '<li>'.$res['pagetitle'].'</li>';
    }
    $output .= '</ul>';
//получаем набор параметров и модифицируем его
    $params = $modx->getObject('modPropertySet',array('name'=>'listCatalog'));
    $params = $params->getProperties();
    $params['parents'] = $res['id'];
    $params['tpl'] = 'catalogProduct4';
    $params['includeTVs'] = 'image';
//вызываем pdoResources столько раз, сколько у нас вкладок
    foreach ($result as $res) {
        $output .= '<div class="tabs__content listCatalog">';
        $output .= $modx->runSnippet('pdoResources', $params);
        $output .= '</div>';
    }
    $output .= '</div>';
};
return $output;
//happy(нет) end
Собственно все работает прекрасно кроме одной вещи — в сниппет не попадает значение tv image.
Пробовал выводить результат без чанка — в массиве значений страницы есть параметр tv.image, но он пустой.

Есть у кого-нибудь мысли, почему может теряться картинка?

UPD
Проблему решил, не в том месте указывал $res['id']
Сам код не удаляю, вдруг кому пригодится.
Олег
25 января 2017, 15:40
modx.pro
1 003
0