Alex

Alex

С нами с 02 января 2017; Место в рейтинге пользователей: #262
Alex
27 июля 2017, 21:58
0
Да, вы совершенно правильно поняли. У вас сейчас вывод товара оформлен в чанке tpl.msProducts.row. Для того чтобы вам вывести товары с другим html оформлением вам нужно создать, например, чанк tpl.msProducts.row2 и там все оформить так как нужно. В сниппете пишете
[[!msProducts?
&tpl = `tpl.msProducts.row2`
]]
Ну и остальные параметры сниппета как вам нужно.
Можно конечно по какому-то признаку на феноме через
{if $...} {/if}
Сделать, но это уже немного другая история и думаю оно вам не надо.
Alex
03 июля 2017, 12:06
0
У меня в object отдает только 'thumb' => бла бла бла. Может при интеграции галереи с минишопом немного другое поведение процессоров…
Alex
03 июля 2017, 07:06
0
Блин, добавил вот это
print ('<pre>');
print_r ($response->response);
Получается что, ms2gallery не отдает в response id только что созданного объекта? Или я что-то не так делаю? Как же тогда корректно импортировать теги. 200 000 тегов вообще не прикольно в ручную забивать будет…
Alex
03 июля 2017, 06:51
0
Мой вариант конечно работает, но блин криво) Не всегда теги совпадают с сортировкой id. Тот вариант, который вы подсказали точно рабочий? Просто у меня вообще не работает это дело. Может кто-то может подсказать, как получить id только что созданного объекта?
foreach ($values['files'] as $file_key => $file_tag) {
            // Вызов процессора загрузки
            $response = $modx->runProcessor('gallery/upload', array(
                    'file' => $file_key,
                    'id' => $resource_id,
                ),
                array('processors_path' => MODX_CORE_PATH . 'components/ms2gallery/processors/mgr/')
            );

       // И здесь нужно получить ID только что созданного объекта, чтобы передать его дальше.
       
}
Alex
01 июля 2017, 16:31
1
0
В общем с процессорами ничего у меня не вышло, не стал заморачиваться и сделал так, теперь все ок:
<?php
$resource_id = '22';

$modx->ms2Gallery = $modx->getService('ms2gallery', 'ms2Gallery', MODX_CORE_PATH . 'components/ms2gallery/model/ms2gallery/');
$prefix = $modx->config['table_prefix'];

$sql = "SELECT id FROM {$prefix}ms2_resource_files WHERE `resource_id` = {$resource_id} AND `parent` = 0 ORDER BY id ASC";
$q = $modx->prepare($sql);
$q->execute();
$ms2Gallery_arr = $q->fetchAll(PDO::FETCH_ASSOC);

foreach ($ms2Gallery_arr as $k => $ms2Gallery_ids) {
    foreach ($ms2Gallery_ids as $v){
        $ms2Gallery_id[$k] = $v;
    }
}
$img_titles = array(
            'черный','черный','черный','белый','белый','белый','бежевый','бежевый','бежевый','черный',
        );
$img_arr = array_combine($ms2Gallery_id,$img_titles);

foreach ($img_arr as $img_key => $img_value){
    $newTag = $modx->newObject('msResourceFileTag');
    $newTag->set('file_id', $img_key);
    $newTag->set('tag', $img_value);
    $newTag->save();
}
Решено.
Alex
29 июня 2017, 10:46
0
Как я пробовал:
<?php
$resource_id = '22';

$modx->ms2Gallery = $modx->getService('ms2gallery', 'ms2Gallery', MODX_CORE_PATH . 'components/ms2gallery/model/ms2gallery/');
$prefix = $modx->config['table_prefix'];

$sql = "SELECT tag FROM {$prefix}ms2_resource_files_tags";
$q = $modx->prepare($sql);
$q->execute();
$tags_arr = $q->fetchAll(PDO::FETCH_ASSOC);

$sql = "SELECT id FROM {$prefix}ms2_resource_files WHERE `resource_id` = {$resource_id} AND `parent` = 0";
$q = $modx->prepare($sql);
$q->execute();
$ms2Gallery_arr = $q->fetchAll(PDO::FETCH_ASSOC);

foreach ($ms2Gallery_arr as $k => $ms2Gallery_ids) {
    foreach ($ms2Gallery_ids as $v){
        $ms2Gallery_id[$k] = $v;
    }
    
}
$img_titles = array(
            'черный','черный','черный','белый','белый','белый','бежевый','бежевый','бежевый','черный',
    
    );
$img_arr = array_combine($ms2Gallery_id,$img_titles);
    
    
foreach ($img_arr as $img_key => $img_value) {
      
        $response = $modx->runProcessor('gallery/update', array(
                'id' => $img_key,
                'tag' => $img_value,
            ),
            array('processors_path' => MODX_CORE_PATH . 'components/ms2gallery/processors/mgr/')
        );
        if ($response->isError()) {
            print_r($response->getAllErrors());
        } else {
            print ('<p style="color: green;">Картинки успешно обновлены</p>');
        }
       
}
Знычения массива
$ms2Gallery_id
:
Array
(
    [0] => 601
    [1] => 599
    [2] => 597
    [3] => 595
    [4] => 593
    [5] => 591
    [6] => 589
    [7] => 587
    [8] => 585
    [9] => 583
)
Значения массива
$img_titles
Array
(
    [0] => черный
    [1] => черный
    [2] => черный
    [3] => белый
    [4] => белый
    [5] => белый
    [6] => бежевый
    [7] => бежевый
    [8] => бежевый
    [9] => черный
)
Затем объединяем эти два массива в один и получаем массив
$img_arr
:
Array
(
    [601] => черный
    [599] => черный
    [597] => черный
    [595] => белый
    [593] => белый
    [591] => белый
    [589] => бежевый
    [587] => бежевый
    [585] => бежевый
    [583] => черный
)
Потом ключи использую как id картинки, а значения как tag.
В БД на выходе получается вообще вот такое горе:
file_id   tag
366     черный
368     черный
370     черный
372     черный
374     черный
376     черный
378     черный
380     черный
382     черный
Пробовал и процессор savetags, вообще ничего не происходит.
Alex
29 июня 2017, 10:31
0
В любом случае спасибо за ответ, но это не то. Вы писали значение в таблицу ms2_resource_files в колонку name, теги записываются несколько иначе. Лежат они в таблице ms2_resource_files_tags где имеется две колонки file_id и tag.
Alex
11 июня 2017, 02:47
+2
Днепр, провайдер Triolan. Modx.pro, modstore, modhost работают нормально, но с неделю назад была подобная проблема, сейчас нормально.
Alex
20 мая 2017, 07:31
0
Здравствуйте. Судя из ответа Fedor с помощью приложения msExtraFields не выйдет сделать зависимые опции, верно я понимаю?
Alex
15 мая 2017, 01:21
0
В скором времени буду заниматься решением данного вопроса, если получиться нормально реализовать, то скину, то что наваяю. Возможно вы уже найдете решение. Склоняюсь к варианту оставить постраничную навигацию «как есть», а на js дописать свою кнопку «подгрузки», вот только делать я буду для mFilter2 и для pdoPage там скорее всего немного поправить нужно будет, так как для фильтра все это дело будет реагировать на событие mse2_load.
Alex
01 февраля 2017, 23:22
0
Все таки оказалось опция нескольких значений в одном мультиселекте нужна и тут возникла проблема. Как мой вариант плагина, который мне подсказали на модекс.ру так и ваш работал некорректно. То есть, если в одном мультиселекте товара задавать например 3 значения вот так: ТВ «Назначение» = В кухню||В прихожую||В гостиную, то в ТВ «Назначение» родительской категории эти значения склеивались вот так В кухнюВ прихожуюВ гостиную в одно значение. Это конечно кардинально не подходило. Подправил чуток плагин, тоже не сварщик, но вроде работает как надо.
$res = $modx->getObject('modResource', $resource->get('id')); //получаем ID текущего ресурса
$template = $res->get('template'); //делаем проверку по шаблону товара
if($template != 5 ) return '';

$tvs = $res->getMany('TemplateVarResources', array('tmplvarid' => 6)); //получаем необработанный массив заданнаго ТВ-параметра
foreach ($tvs as $k =>$tv) { // выводим массив
    $tvs = $tv->toArray();
}

$tvs = array_splice($tvs, 3); // вырезаем первые три пары [ключ]=>значение, оставляем только значения ТВ
$tvs = implode('||',$tvs); // переводим массив в строку с разделителем ||

$par_id = $res->get('parent'); //получаем ID родителя
if(empty($par_id)) return '';

$tvr = $modx->getObject('modTemplateVarResource', array( //получаем необработанные значения ТВ родителя
  'tmplvarid' => 6, //тут ID нужного TV
  'contentid' => $par_id
));

if ($tvr) {
  $parTV = $tvr->get('value');
}
$pos = strpos($parTV, $tvs); // сравниваем строковые значения ТВ родителя и ТВ текущего документа, оставляем только уникальные

if ($pos === false){ //если не найдено...
    $newTV = $parTV.'||'.$tvs; //...добавляем значение
    $parent = $modx->getObject('modResource', $par_id); //получаем объект родителя
    $parent->setTVValue('tip', $newTV); //пишем в тв родителя
}
Alex
07 января 2017, 09:19
0
Привет. Спасибо за ответ. Я использовал вот такой код:
<?php
$template = $resource->get('template');
if($template != 5 ) return ''; // ID шаблона товара
$myTV = $resource->getTVValue('tip'); //получаем TV
$par_id = $resource->get('parent'); //получаем ID родителя
if(empty($par_id)) return '';

$tvr = $modx->getObject('modTemplateVarResource', array(
  'tmplvarid' => 6, //тут ID TV
  'contentid' => $par_id
));
if ($tvr) {
  $parTV = $tvr->get('value');
}
$pos = strpos($parTV, $myTV); //находим вхождение TV товара в строке TV родителя
if ($pos === false){ //если не найдено...
    $newTV = $parTV.'||'.$myTV; //...добавляем значение
    $parent = $modx->getObject('modResource', $par_id); //получаем объект родителя
    $parent->setTVValue('tip', $newTV); //и пишем в TV родителя
}
Вроде бы вполне нормально работает, ваш вариант не пробовал, но все равно спасибо за ответ.