Андрей

Андрей

С нами с 28 февраля 2013; Место в рейтинге пользователей: #140
Андрей
27 декабря 2016, 09:36
0
Да, так работает, спасибо. Не знал, что не заданные TV не хранятся нигде.
Андрей
26 декабря 2016, 17:55
0
Вот это, кстати
if(!empty($_GET['content'])){
	$data2 = array(
		'content' => $desc
	);
	$data = array_merge($data, $data2);
}

Можно заменить на
if(!empty($_GET['content'])){
	$data['content'] = $desc;
}
Андрей
26 декабря 2016, 17:49
0
Их вроде бы каждый раз надо записывать, даже при обновлении. Сам когда сталкивался, нашел вот этот комментарий.

Андрей
26 декабря 2016, 11:59
0
Если не ошибаюсь, то так

total.cost
delivery.price
order.cost
Андрей
16 декабря 2016, 21:37
+3
Тогда уж и сниппет на феноме перепишите

{$_modx->runSnippet('pdoResources', [
	'parents' => 17,
	'resources' => $_modx->resource.boleznID,
	'tpl' => '@INLINE <li class="priem-list-item"><a href="[[~[[+id]]]]">[[+pagetitle]]</a></li>'
])}
Андрей
16 декабря 2016, 14:53
0
Попробуйте вызывать pdoResources не кешируемым, либо перенесите вызов в чанк и вызывайте так:

[[$[[*boleznID:!empty=`имя_чанка`]]]]

Можно еще tpl в чанк вынести.
Андрей
16 декабря 2016, 14:26
+1
[[*boleznID:!empty=`ваш код`]]

Посмотрите какие модификаторы еще есть.
Андрей
16 декабря 2016, 11:31
+1
Создаете сниппет, в нем пишете

print_r($_SESSION['minishop2']['cart'])

Вызываете сниппет на странице корзины.
Андрей
15 декабря 2016, 16:47
1
+2
Тоже недавно возникла такая задача, решил написанием плагина.

Вешается на событие OnLoadWebDocument, так же создал TV поля pattern-seo-title, pattern-seo-keywords, pattern-seo-description.

if ($modx->event->name == 'OnLoadWebDocument') {
    
  function getMeta($id) {
    global $modx;
    
    if ($resource = $modx->getObject('modResource', $id)) {
      
      $title = $resource->getTVValue('pattern-seo-title');
      $keywords = $resource->getTVValue('pattern-seo-keywords');
      $description = $resource->getTVValue('pattern-seo-description');

      if ((isset($title) && !empty($title)) || (isset($keywords) && !empty($keywords)) || (isset($description) && !empty($description))) {
        $modx->setPlaceholder('pattern.seo.title', $title);
        $modx->setPlaceholder('pattern.seo.keywords', $keywords);
        $modx->setPlaceholder('pattern.seo.description', $description);
      } else {
        getMeta($resource->get('parent'));
      }        
    }
  }
  
  $id = $modx->resource->parent;
  
  getMeta($id);
    
}

В разделе для которого нужно применить шаблон, в TV полях уже можно писать например — "«[[*pagetitle]]»" купить, "«[[*pagetitle]]»" цена и отзывы, инструкция по применению — "«[[++site_name]]»"

В шаблоне выводятся как плейсхолдеры [[+pattern.seo.title]], [[+pattern.seo.keywords]], [[+pattern.seo.description]]

Я выводил так, на Fenom

{set $pattern_seo_title = $_modx->getPlaceholder('pattern.seo.title')}
{set $pattern_seo_keywords = $_modx->getPlaceholder('pattern.seo.keywords')}
{set $pattern_seo_description = $_modx->getPlaceholder('pattern.seo.description')}

{if $_modx->resource['seo-title']?}
	{$_modx->resource['seo-title']}
{elseif $pattern_seo_title?}
	{$pattern_seo_title}
{else}
	{$_modx->resource.pagetitle}
{/if}

{if $_modx->resource['seo-keywords']?}
	{$_modx->resource['seo-keywords']}
{else}
	{$pattern_seo_keywords}
{/if}

{if $_modx->resource['seo-description']?}
	{$_modx->resource['seo-description']}
{else}
	{$pattern_seo_description}
{/if}
Андрей
15 декабря 2016, 16:28
0
В сессии (если не путаю $_SESSION['minishop2']['cart']) хранится корзина со всеми товарами и их параметрами. В корзине у товара можете вывести опции в виде селектов и менять сессию по ajax например.
Андрей
07 ноября 2016, 11:05
0
Василий, спасибо, буду смотреть.
Андрей
02 ноября 2016, 09:19
0
Мне нужно в зависимости от акции (например, скидка на все товары определенного раздела) выводить разные бирки (текстовые, либо изображения) у товаров. Не нашел как это сделать стандартными средствами. Решил просто получать id акций из базы и сравнивать подходит ли товар под эту акцию, а потом уже как-то выводить бирки.

Проблема в том что никак не пойму как определить по товару к какой акции он относится. Нашел такой метод getProductAllDiscounts, но он возвращает лишь разницу в цене.

Можно ли как-то узнать акцию по товару?
Андрей
30 октября 2016, 19:07
0
Выводится так
[[getImageList?
	&tvname=`Имя_TV_MIGX`
	&tpl=`@CODE: <a href="[[+имя_переменной_в_migx]]">Файл</a>`
]]

Если включен fenom в настройках pdoTools, то можно так
{foreach $_modx->resource.Имя_TV_MIGX | json_decode as $key}
	<a href="{$key.имя_переменной_в_migx}">Файл</a>
{/foreach}

Но лучше почитать документацию MIGX, там все подробно и с примерами написано.
Андрей
21 сентября 2016, 21:38
0
Что-то не работает, выдает ошибку

Uncaught TypeError: Argument 4 passed to msopModificationOption::saveOptions() must be of the type array, null given

Добавил
$corePath = $modx->getOption('msoptionsprice_core_path', null, $modx->getOption('core_path', null, MODX_CORE_PATH) . 'components/msoptionsprice/');
$msoptionsprice = $modx->getService('msoptionsprice', 'msoptionsprice', $corePath . 'model/msoptionsprice/', array('core_path' => $corePath));


я так понимаю ругается на $options в строке
$modx->call('msopModificationOption', 'saveOptions', array(&$modx, $mid, $rid, $options));
Андрей
21 сентября 2016, 17:15
0
Как добавить модификацию через процессор?

У товара нет никаких модификаций.

Пишу так, выводит ошибку о том что поле price должно быть уникально
$modification_data = array(
  'rid' => 45019,
  'type' => 1,
  'price' => $good_price,
  'article' => $good_article,
  'weight' => '',
  'count' => 0,
  'active' => 1
);

$response = $modx->runProcessor('modification/create', $modification_data, array(
  'processors_path' => MODX_CORE_PATH.'components/msoptionsprice/processors/mgr/'
));

if ($response->isError()) {
  print_r($response->getResponse());
}

Сама ошибка
Array
(
    [success] => 
    [message] => 
    [total] => 1
    [errors] => Array
        (
            [0] => Array
                (
                    [id] => price
                    [msg] => Это поле должно быть уникально
                )

        )

    [object] => Array
        (
        )

)
Андрей
15 сентября 2016, 14:32
2
+1
$id = $response->response['object']['id']; //id товара

$gallery = array(
  'id' => $id,
  'name' => '',
  'rank' => 0,
  'file' => MODX_BASE_PATH.'/userdata/promo/2016-hennessey-venom-gt-spyder-v4-1080.jpg'
);

$upload = $modx->runProcessor('gallery/upload', $gallery, array(
  'processors_path' => MODX_CORE_PATH.'components/minishop2/processors/mgr/'
));

if ($upload->isError()) {
  print_r($upload->getResponse());
}

Не уверен правда как правильно сделать загрузку сразу нескольких файлов.
Андрей
15 сентября 2016, 09:59
2
+1
$response = $modx->runProcessor('resource/create', array(
  'class_key' => 'msProduct',
  'pagetitle' => 'Товар',
  'parent' => 55,
  'template' => 11,
  'show_in_tree' => 1,

  //Данные
  'price' => 100,
  'old_price' => 0,
  'favorite' => 0,
  'popular' => 0,

  //стандартные опции товара
  'color' => array('Синий', 'Красный'),
  'size' => array('S', 'M'),
  'tags' => array('Тег1', 'Тег2'),

  //свои опции созданные в настройках
  'options-КЛЮЧ_ОПЦИИ' => array('значение1', 'значение2'),

  //TV - 10 это id TV
  'tv10' => 'Значение'
));
Андрей
06 сентября 2016, 14:24
0
Да, в цвет он добавил, но у меня свои поля, которые я добавил в настройках Минишопа, например Тип, с ключом tip. Заменил color на tip — ничего не добавил.