Всего 125 976 комментариев

Vladimir
04 марта 2022, 10:33
0
Вот это работает и записывает данные
$tvcid->setValue($currentResourceId, json_encode($ar));
но поменял на это
$tvr = $modx->newObject('modTemplateVarResource');
$tvr->set('tmplvarid', 25);
$tvr->set('contentid', $currentResourceId);

$tvr->set('value', json_encode($ar));
$tvr->save();
MIGX_id обязательно нужно ставить, иначе сам он не подставляет именно в код
И всё так же уходит в бесконечное сохраннее если этот плагин включен
<?php
switch ($modx->event->name) {
	
	case 'OnDocFormSave':
		if ($resource->get('template') == 3 && empty($resource->getTVValue('reviews'))) {
			$resource->setTVValue('ratingCount', strval(0));
			$resource->setTVValue('activeReviewsCount', strval(0));
		}
		elseif ($resource->get('template') == 3 && !empty($resource->getTVValue('reviews'))) {
			$activeReviews = 0;
			$totalActiveRating = 0;    
			$avgRating = 0;

			try {
				$reviews = json_decode($resource->getTVValue('reviews'), true);
				
				if($reviews){
					foreach($reviews as $key => $value){
						if($value['is_active'] == '1'){
							$activeReviews += 1;
							$totalActiveRating += $value['rating'];
						}
					}
					
					$avgRating = $totalActiveRating / 5;                        
				}
				$resource->setTVValue('ratingCount', strval($avgRating));
				$resource->setTVValue('activeReviewsCount', strval($activeReviews));
			} catch(Exception $e) {
				$modx->log(1, 'Бред 0');
				$modx->log(1, $e);                    
			}


		}

}
Georg
04 марта 2022, 10:21
0
Спасибо за ответ. Я не хотел использовать migx, но где моя ошибка понял
Vladimir
04 марта 2022, 09:23
0
Если делать через ресурсы, то человек без прав не может создать migx запись, поэтому пришлось делать так. Всё равно не помогает
Александр Мельник
04 марта 2022, 08:20
+1
Я любитель еще более простых решений) Зачем вам статичные пункты меню, такие как — о компании, контакты, формировать динамически через pdoMenu. Оставьте их в html и пропишите руками ссылки. А для формирования подменю с товарами используйте уже pdoMenu или pdoResources или msProducts и настройте их так чтобы отбирались только товары.
Дмитрий Бородин
04 марта 2022, 04:41
0
Интересное решение, конечно, только я пока не совсем понимаю… Проверка id страницы выведет результат, в зависимости от того, на какой странице я нахожусь. Разве нет? А главное меню должно на всех страницах быть одинаковым.
Артур Шевченко
03 марта 2022, 23:09
0
Не понимаю причём тут авторизованные люди. Вы можете в объект modx добавить любого пользователя. А что касается MIGX, то указывать MIGX_id необязательно, он подставиться автоматически, возможно и из-за этого проблема. И лучше всё же сделать через ресурсы.
Артур Шевченко
03 марта 2022, 23:05
0
Я как любитель простых решений, предлагаю выводить меню только первого уровня, при этом в чанке &tpl проверять id, и если он равен id Товары, то выводить товары сниппетом pdoResources.
Артур Шевченко
03 марта 2022, 22:32
+1
Как это исправить?
Сделать idtab, gid, range параметрами сниппета. Тогда сниппет будет вызываться так
[[!Google-Shits?
&idtab=`value`
&gid=`value`
&range=`value`
]]
Ну а сами параметры, я бы запихнул в migx.
Вместо этого нужно оставить только параметры.
$idx = $modx->getObject('modTemplateVar', array('name' => 'idtab'))->getValue($modx->resource->get('id'));
$gid = $modx->getObject('modTemplateVar', array('name' => 'gid'))->getValue($modx->resource->get('id'));
$range = $modx->getObject('modTemplateVar', array('name' => 'range'))->getValue($modx->resource->get('id'));
Олег
03 марта 2022, 14:40
0
Спасибо большое! Иначе это был бы ад.
Stepan
03 марта 2022, 11:43
0
в новых версиях pdoTools все работает
Vladimir
03 марта 2022, 08:52
0
Да а если нет он создаёт, и отображает правильно созданный элемент, и даже когда уже есть элементы он правильно всё подставляет, но при попытки сохранить(новые изменения в уже созданных таким методом) таким образом созданные Migx уже уходит в бесконечное сохранение. Да до этого я делал правильно через resource и так далее, но беда в том что это должно работать с авторизированными людьми у которых нет прав на что либо кроме лоад и т.д
Vladimir
03 марта 2022, 08:48
+1
Должно быть так в Действительный URI перенаправления
https://имясайта.ауф/?hauth.done=Facebook
Андрей
02 марта 2022, 22:48
+1
Основную планирую использовать под модификации. Есть ещё набор «имиджевых» фотографий, под них нужна вторая галерея, т.к. они выводятся на фронте в другом блоке, не в основной галерее.
Как минимум можно использовать группировку по тегам (функционал ms2gallery), и выводить в разных местах c указанным тегом в параметре tags.
Артур Шевченко
02 марта 2022, 22:13
0
Простой установкой две вкладки не сделаешь. К тому же сами по себе две вкладки задачу не решат, я бы просто в migx запихнул ту галерею, которая не для модификаций.
Артур Шевченко
02 марта 2022, 21:26
+1
Если мне не изменяет память, то Действительный URI перенаправления должен содержать параметр done=Facebook.
Артур Шевченко
02 марта 2022, 20:43
0
Вот тут
$ar = json_decode($reviews->get('value'), true);
ты получаешь уже имеющиеся отзывы из ресурса $reviews.
А вот тут
$tvcid->setValue($currentResourceId, json_encode($ar));
Ты устанавливаешь значение чего? $tvcid объект класса modTemplateVar, и он не хранит значение переменной шаблона. Мне кажется надо устанавливать значение переменной в объект $reviews.
Aleksandr Huz
02 марта 2022, 19:38
+1
Чтобы работало с msPromoСode2 нужно в файл
core/components/mspromocode2/plugins/mspc2msongetproductprice.class.php
добавить код:
$mspaidoptions = $this->modx->getService('mspaidoptions', 'msPaidOptions', MODX_CORE_PATH . 'components/mspaidoptions/model/');
if ($mspaidoptions) {
    $this->sp['price'] = $mspaidoptions->getPrice($this->sp['product'], $_REQUEST['options']);
}
после строчки:
$product = $this->sp['product'];
Николай Савин
02 марта 2022, 18:09
+1
Размещайте пожалуйста код в специальном тэге
Дмитрий
02 марта 2022, 17:30
0
Господи, как же убожески сделали меню… Через migx. Спасибо, огромное!!!