Андрей

Андрей

С нами с 28 февраля 2013; Место в рейтинге пользователей: #140
Андрей
23 июня 2017, 15:16
0
mFilter2 либо свой велосипед, pdoPage c включенным ajax не будет работать через ajax
Андрей
23 июня 2017, 15:10
+2
Если я правильно понял, то сделайте плагин для события OnLoadWebDocument и перезаписывайте там на лету все что угодно

$modx->resource->pagetitle = 'новый pagetitle';
Андрей
23 июня 2017, 08:59
0
Добрый день, готов обсудить, все контакты в профиле, пишите в скайп или на почту.
Андрей
22 июня 2017, 08:32
+1
1. SimpleSearch не поддерживает Fenom, так что используйте обычный синтаксис

2. С картинками можно делать так
{set $image = 'phpthumbon' | snippet : [
	'input' => '/assets/userfiles/'~$item['image'],
	'options' => 'w=470&h=320&zc=1'
]}

<img class="img-fullwidth lazy" src="{$image}" alt="">
Андрей
20 июня 2017, 20:11
0
Посмотрите, есть ли ошибки в логах модх и сервера.
Андрей
20 июня 2017, 19:14
0
Просто, пропустите этот шаг

Плейсхолдер у вас тогда будет выглядеть так
<span class="ms2_total_count_position">[[+total_count_position]]</span>
Андрей
20 июня 2017, 18:13
1
+1
Да, сейчас проверил, в сниппете BabelLinks в начале пишете

$pdo = $modx->getService('pdoTools');

//далее в сниппете меняете в трех местах $babel->getChunk на $pdo->getChunk

И все, теперь сниппет поддерживает fenom
Андрей
20 июня 2017, 17:39
0
В BabelLinks вызывается стандартный парсер modx, а не pdoParser, поэтому и не работает, используйте стандартные плейсхолдеры [[+cultureKey]].

Либо в сниппете подключите сервис pdotools и всю обработку чанков производите через него.
Андрей
19 июня 2017, 08:17
0
pdoResources и отбор результатов по where не пойдет?

Как-нибудь так
[[pdoResources?
	&where=`{"city:LIKE":"%[[!#.get.city]]%","cafe:LIKE":"%[[!#.get.cafe]]%"}`
]]
Андрей
16 июня 2017, 15:14
0
В вашей задаче проще всего условие поставить в чанке/шаблоне как в первом комментарии вам написали. Для сниппета или плагина так же придется условие ставить.
Андрей
16 июня 2017, 14:43
+1
Чанк в сниппете getimagelist отрабатывает через стандартный парсер modx, а не через парсер pdoParser, поэтому не работает.

Если очень хочется что бы работал, то в сниппете надо вызвать сервис и поменять вызовы обработки чанков, должно работать
$pdo = $modx->getService('pdoFetch');

//далее везде заменить $modx->getChunk на $pdo->getChunk

Но смысла не вижу, т.к. через foreach удобнее, а почти все параметры можно с помощью условий сделать.
Андрей
16 июня 2017, 07:51
2
+1
Там стандартные опции color, size задаются так
$product->set('color', array('черный', 'белый'));

А те опции которые создаешь сам так
$options = array(
	'option1' => array('value1', 'value2'),
	'option2' => array('value1', 'value2')
);

$product->set('options', $options);
Андрей
15 июня 2017, 17:43
0
Попробуй rowTpl в чанк вынести, а не инлайном
Андрей
15 июня 2017, 17:41
0
В сниппете getimagelist нет, т.к. он не поддерживает fenom.

Но можно выводит используя fenom
{foreach $_modx->resource.tv_name | json_decode as $item}
	<div>{$item.title}</div>
{/foreach}
Андрей
15 июня 2017, 17:37
0
Тогда просто делаете аякс запрос к вашему контроллеру с параметрами — id товара, добавить/удалить лайк. А уже в контроллере ищете товар в вашей таблице по id и далее создаете/обновляете запись с количеством лайков.
Андрей
15 июня 2017, 17:32
2
0
Надо плагин сделать для минишопа как описано тут.

Работает это с версии минишоп 2.4 как я понимаю.

1. В папке /core/components/minishop2/custom/cart/ создаете файл mascarthandlerstatus.class.php который будет расширять класс корзины

2. В этом файле пишете
<?php

if(!class_exists('msCartInterface')) {
    require_once dirname(dirname(dirname(__FILE__))) . '/model/minishop2/mscarthandler.class.php';
}

class msCartHandlerStatus extends msCartHandler implements msCartInterface{

    public function status($data = array())
    {
        $status = array(
            'total_count' => 0,
            'total_count_position' => 0,
            'total_cost' => 0,
            'total_weight' => 0
        );

        foreach ($this->cart as $item) {
            if (empty($item['ctx']) || $item['ctx'] == $this->ctx) {
                $status['total_count_position'] += 1;
                $status['total_count'] += $item['count'];
                $status['total_cost'] += $item['price'] * $item['count'];
                $status['total_weight'] += $item['weight'] * $item['count'];
            }
        }

        return array_merge($data, $status);
    }
}

3. В плагине Console (если его нет, то надо поставить) выполняем следующий код
if ($miniShop2 = $modx->getService('miniShop2')) {
    $miniShop2->addService('cart', 'msCartHandlerStatus',
        '{core_path}components/minishop2/custom/cart/mascarthandlerstatus.class.php'
    );
}
Таким образом мы добавляем новый обработчик корзины

4. Далее идем в Системные настройки -> mimishop2 -> Класс обработчик корзины и указываем там msCartHandlerStatus

5. Теперь в плейсхолдере total_count_position будет отображаться количество позиций в корзине

6. Что бы все это и по аяксу обновлялось, в js в ваших скриптах или просто в конце страницы (главное что бы он был после подключения скрипта от минишопа) добавляем такой код
miniShop2.Cart.status = function (status) {
  if (status['total_count'] < 1) {
      location.reload();
  }
  else {
      var $miniCart = $(miniShop2.Cart.miniCart);
      if (status['total_count'] > 0 && !$miniCart.hasClass(miniShop2.Cart.miniCartNotEmptyClass)) {
          $miniCart.addClass(miniShop2.Cart.miniCartNotEmptyClass);
      }
      $(miniShop2.Cart.totalWeight).text(miniShop2.Utils.formatWeight(status['total_weight']));
      $(miniShop2.Cart.totalCount).text(status['total_count']);
      $(miniShop2.Cart.totalCost).text(miniShop2.Utils.formatPrice(status['total_cost']));
      $('.ms2_total_count_position').text(status['total_count_position']);
      if ($(miniShop2.Order.orderCost, miniShop2.Order.order).length) {
          miniShop2.Order.getcost();
      }
  }
};

7. Теперь в миникорзине или корзине можно писать так
<span class="ms2_total_count_position">{$total_count_position}</span>
Андрей
15 июня 2017, 16:00
0
Каким образом рейтинг формироваться будет? В ручную в поле просто вбивается или как?
Андрей
09 июня 2017, 09:29
1
+2
Не знаю как вы выравниваете, но если text-align: justify, то между пунктами меню должны быть переносы или пробелы иначе работать не будет.

Проще конечно с помощью display: flex; justify-content: space-between;
Андрей
09 июня 2017, 09:19
+1
Я посмотрел вчера как устроен сниппет pdoPage, я так понимаю при вызове он генерирует hash и config, что бы можно было использовать на странице несколько вызовов сниппета. Поэтому когда вы вызываете его в своем сниппете, то кроме того, что надо вставить html на страницу, надо еще и перевызвать метод из js pdoPage.initialize с новым config (его тоже надо сгенерировать), при этом старый как-то отменить или удалить, а так же записать hash в сессию.

Мне кажется тут проще свой вариант написать с пагинацией, чем переделывать pdoPage.