Наумов Алексей

Наумов Алексей

С нами с 31 марта 2013; Место в рейтинге пользователей: #13
Наумов Алексей
16 мая 2019, 14:34
0
Вы знаете что такое плейсхолдер?
Наумов Алексей
16 мая 2019, 14:06
0
Раз записываете переменную так:
{$_modx->setPlaceholder('test', 5)}
То далее получать ее значение нужно так:
{set $test = $_modx->getPlaceholder('test')}
Наумов Алексей
16 мая 2019, 13:55
0
{$_modx->setPlaceholder('test', 4)}
Только смотрите, чтобы test был уникальным, а не $id).
Наумов Алексей
15 мая 2019, 15:56
0
А так не сработает?
"on": "`tv.articleCat` = `Category`.`id`"
Поле выбирается с точкой «tv.articleCat», она воспринимается разделителем, выглядит как таблица tv, поле articleCat.
Наумов Алексей
15 мая 2019, 15:32
0
Итак, жмем на этой странице Ctrl + F и ищем:
1. сначала articleCat
2. потом articleСat

Далее исправляем косяки.
Наумов Алексей
15 мая 2019, 15:29
0
Точно в файле ничего лишнего не появилось?
Стоит сравнить побайтово!
Наумов Алексей
15 мая 2019, 14:08
+1
Готового наверное нет…

Нужно написать плагин, регистрирующий js, в котором выбрать (читай загуглить) событие, срабатывающее после показа окна редактирования ресурса, на это событие прицепить код:

var resourceTabs = Ext.getCmp("modx-resource-tabs");
if(resourceTabs) {
    resourceTabs.setActiveTab(resourceTabs.findById("modx-resource-tvs-div"));
}
ну а чтобы ссылку сделать, достаточно в ней передать хеш #tab-tvs, и скриптом проверять этот хеш.
Наумов Алексей
15 мая 2019, 13:59
0
showLog что показывает?
Наумов Алексей
08 мая 2019, 14:28
0
Есть категория
/category
в ней товары 1,2,3
/category/1
/category/2
/category/3

У этих товаров параметр «Тип»: «3D-Торт», «торт без мастики», «многоярусный торт»

На выходе получим виртуальные (т.е. в админке их нет) страницы:
/category/3d
/category/bez-mastiki
/category/mnogoyarusniy

Товары не дублируются.
Наумов Алексей
08 мая 2019, 11:25
0
Выглядит как товары, лежащие в родительской категории, у которых есть параметры «3D-Торты», «торты без мастики», «многоярусные торты», а по ним строится сео-фильтр.
Дочерних категорий соответственно нет, они виртуальные, генерируются фильтром.
Наумов Алексей
29 апреля 2019, 17:14
+1
Компонент считает рейтинг по 2-м алгоритмам: по Вильсону и среднее арифметическое.
По-умолчанию вильсон, отсюда и такой средний бал.
Чтобы было среднее арифметическое — в используемых чанках поменяйте постфикс "_wilson" на "_simple".
Наумов Алексей
23 апреля 2019, 09:03
1
0
&parents=`Блог новостей сервиса`
такого здесь еще никто не видел)))

Здесь нужно указать id родительского ресурса, в виде числа.
Наумов Алексей
29 марта 2019, 09:13
0
Нужно включить лог (&showLog=`1` ) и посмотреть, какой запрос формируется.
Наумов Алексей
28 марта 2019, 09:53
+1
Берем нужный нам сниппет (pdoResources, msProducts).
К выборке присоединяем цепочку и выбираем кол-во отзывов:
&leftJoin=`{
        "ecThread": {
    		"class": "ecThread",
    		"on": " CONCAT('resource-', modResource.id) = ecThread.name"
    	}
    }`
    &select=`{
    	"modResource": "*",
    	"ecThread": "ecThreadRating.count AS reviews_count",
    }`
После сортируем по полю reviews_count
Наумов Алексей
26 марта 2019, 15:16
1
0
Не совсем. OnEcMessagePublish сработает когда в админке будет выбран пункт меню «Опубликовать». Но если просто отредактировать сообщение, проставив галочку «Опубликован», то будет событие OnEcMessageSave.

Если нужно отслеживать, что поменялся список отзывов, то надо ловить все события: OnEcMessageSave, OnEcMessagePublish, OnEcMessageUnpublish, OnEcMessageDelete, OnEcMessageUndelete, OnEcMessageRemove.

плагин один, код один, события несколько. Уже в плагине смотрите, что произошло.
Получить id вроде как, если не путаюсь:
$id = $object->get('id');
Наумов Алексей
26 марта 2019, 14:43
1
0
По событиям документации нет.

Список:
// ecThread events
OnBeforeEcThreadRemove
OnEcThreadRemove
// ecMessage events
OnBeforeEcMessageSave
OnEcMessageSave
OnBeforeEcMessagePublish
OnEcMessagePublish
OnBeforeEcMessageUnpublish
OnEcMessageUnpublish
OnBeforeEcMessageDelete
OnEcMessageDelete
OnBeforeEcMessageUndelete
OnEcMessageUndelete
OnBeforeEcMessageRemove
OnEcMessageRemove

В событии как правило доступен $object (ecMessage или ecThread).
Наумов Алексей
20 марта 2019, 09:33
0
Попробуйте посмотреть в событиях OnDocFormSave и OnBeforeDocFormSave на поля publishedon.
Возможно (но не точно) для ресурса, который не был опубликован, а сейчас галочку поставили, эта дата будет пустая.
Наумов Алексей
19 марта 2019, 09:03
0
Нашел в интернате вот эту функцию
miniShop2.Callbacks.Cart.add.response.success = function() {}
Вешаю ее на странице карточки товара. Но в консоль выводится это:
Uncaught ReferenceError: miniShop2 is not defined
Ваш скрипт должен быть подключен после всех скриптов минишоп.
Наумов Алексей
14 марта 2019, 16:02
0
Насколько я помню по своему опыту, главный трабл был в том, что были затерты js файлы.

Примерный сценарий:
1. Разворачиваем сайт
2. Устанавливаем поверх свежий (или не очень свежий) MODX
3. Обновляем все компоненты, задача — переустановить их с заменой файлов
4. Удаляем старые версии компонентов, чтобы уменьшить кол-во файлов
5. Тщательно ищем упоминания вирусов во всех файлах, сверяемся с исходниками modx и компонентов, используем антивирусы.
6. Кстати. Вот перед всем этим, хорошо бы проанализировать даты изменения файлов. Возможно, вам получится выяснить список файлов, модернизированных вирусом.
7. Недостающие файлы пытаемся найти через webarchive или свои старые бекапы. Это единственное место, где я смог найти js файлы.
Наумов Алексей
13 марта 2019, 16:46
0
bootstrap + возможно MobileDetect
Актуально)
Каталог с поддержкой фильтрации, значит MS2
Да, miniShop2 + mFilter2 (mSearch2).
Что-то удобное по загрузке фотографий для MS2 — ms2Gallery
Если нужно дополнительно, то да. Хотя и штатная галерея вроде ничего.
Отзывы — Tickets
Вполне. Или советую свой компонент easyComm.

Избранное к каталогу
msFavorites modstore.pro/packages/ecommerce/msfavorites
И возможно предзаказ
Или штатную корзину от минишопа, где покупка и будет «предзаказом», или вообще «Купить в 1 клик» в виде простейшей формы.

Office — если нужен кабинет. Авторизацию вроде он поддерживает штатно через HybridAuth.