Всего 125 971 комментарий

Николай Савин
06 марта 2022, 10:58
0
Блок meta можно отключить в системной настройке zoomx_include_request_info
Тогда data напрямую в корень будет выводиться или просто минус один элемент массива на выходе?
Сергей Шлоков
06 марта 2022, 08:56
+4
Сделаю несколько пояснений.

pdoTools никакого отношения к теме статьи не имеет и для ZoomX не нужен. Я использую его лишь для того, чтобы работать с разметкой шаблона через IDE.
Это только для тех, кто хочет работать с шаблонизатором Fenom. Если есть желание работать в режиме фреймворка, то можно работать с шаблонизатором Smarty, который идёт с MODX из коробки. Я много раз уже говорил, что Fenom в pdoTools — это костыль, который вроде как добавляет возможности нормального шаблонизатора, но работает по правилам MODX шаблонизатора — многократный парсинг и компиляция контента, который ему подсовывает MODX шаблонизатор. В правильном режиме php шаблонизатор парсит страницу один раз, компилирует её в php файл и использует его при следующих запросах, не тратя время на повторный парсинг и компиляцию.

Если в роуте не указан метод контроллера, запрос всегда обращается к главному методу index()
Сначала проверяется наличие магического метода __invoke. Если его нет, то будет вызван метод index.

Метод jsonx всегда возвращает объект с тремя блоками.
Блок meta можно отключить в системной настройке zoomx_include_request_info
Александр Мельник
06 марта 2022, 08:52
+3
Дмитрий, вы очень плохо описываете свой вопрос. Два предложения и даже они почти бессмысленные.
Честь и хвала Артуру, что ему хватает нервов и времени попытаться разобраться и найти хоть крупицу логики, написать вам ответ. А потом вы вдруг все переворачиваете с ног на голову, говоря про админку.
Если бы вы описали задачу кратко, но полностью — вероятность что вам бы помогли была бы больше.

Артур вам правильно написал, formit это лишь программа для отправки форм, а форма передает информацию, данные, а не теги. Есть множество способов передать данные в форму. К примеру используя возможности javascript работать с DOM деревом, как описал Артут. Либо можно просто информацию которую лежит у вас в теге p продублировать уже в виде тега input type=hidden value=название категории name=categoryName
Если этот тег будет размешен внутри формы, то название категории отправится.
Если вы хотите чтобы отправляемые пользователем данные просто сохранялись в админке, то ознакомьтесь с документацией на formit
docs.modx.com/current/en/extras/formit/index
и особенно
docs.modx.com/current/en/extras/formit/formit.hooks/formitsaveform
Дмитрий
06 марта 2022, 00:08
0
мне надо, чтобы это ещё в админке выводилось
Mish
05 марта 2022, 22:33
0
Спасибо за ответ! Прописываю вот так: {$cvet}/{$razmer}, все равно выводит название родительской :(
Артур Шевченко
05 марта 2022, 22:22
0
Очень легко: нужно под каждую комбинацию опций создать отдельное правило SEO. Под две опции, нужно 3 правила
1. {$option1}
2. {$option2}
3. {$option1}/{$option2}
Для трех опций нужно 7 правил
1. {$option1}
2. {$option2}
3. {$option3}
4. {$option1}/{$option2}
5. {$option1}/{$option2}/{$option3}
6. {$option1}/{$option3}
7. {$option2}/{$option3}
И так далее
Дмитрий Бородин
05 марта 2022, 20:09
0
Столкнулся с такой же проблемой. BabelLinks не выводит ссылки в меню в контексте web. Если добавить параметр &showCurrent=`1`, показывает только основной язык (русский). Также на сайте добавлен английский и французский языки в указанном порядке. Если вручную перейти на английскую версию сайта, то BabelLinks выводит ссылку на русскую и английскую версии только. Если вручную перейти на французскую версию сайта, тогда BabelLinks выводит уже все три языка… Переводы все есть. Кэш чистил несколько раз. Сайт включен. А проблема не исчезает. Пытался найти ответ на других форумах, там предлагают использовать для переключения сторонние плагины только. Только не хочется использовать для этого костыли, когда есть стандартное готовое решение.
Артур Шевченко
05 марта 2022, 09:48
+1
Непосредственно html-тэги нельзя отправить, но можно сделать так
<htm>
    <body>
        <form>
            <p>Some text</p>
            <input type="hidden" name="service">
        </form>  
        <script>
            let  form = document.querySelector('form');
            form.addEventListener('submit', function(e){
            e.preventDefault();
            let par = document.querySelector('p'),
                input = document.querySelector('input[name="service"]');
            input.value = par.innerText;
            });
        </script>
    </body>
</html>
Евгений Webinmd
04 марта 2022, 16:29
+1
Создаете новую папку с ключем языка в папке с лексиконами минишопа, копируете туда английский или русский вариант и меняете там нужные вам надписи
Артур Шевченко
04 марта 2022, 14:11
+1
Можно под каждую таблицу создать отдельное ТВ или по три ТВ, но по-моему лучше обойтись одним MIGX.
Артур Шевченко
04 марта 2022, 14:10
0
ну так-то да, но есть один нюанс, если заказчик, а так бывает, захочет добавить ещё раздел на первом уровне или переименовать существующий, статически выведенное меню нужно будет менять вручную, поэтому я бы так не делал, просто из-за лени)))
Артур Шевченко
04 марта 2022, 14:07
0
А я не говорил про id страницы, у каждого пункта меню, т.к. это ресурс, есть id и при выводе меню вы проверяете равен ли id текущего пункта например 2, где 2 это id ресурса Товары, если равен, то вызываете pdoResources/pdoMenu/
Константин Ильин
04 марта 2022, 12:20
0
Гляньте:
1. ошибка в Консоли браузера
2. ошибка в Логе modx
3. ошибка в Логе Сервера
4. Если зайти в Админке, в ресурс, MIGX нормально показывает? Это вопрос про ошибку на 1860 строке prnt.sc/3CQsst937gOr
5. Попробовать(естественно с переделками) данный код в Console
Сергей Карпович
04 марта 2022, 12:09
0
или подставлять другой чанк, если в галерее только одно фото выбрано?..
Сергей Карпович
04 марта 2022, 11:52
0
Есть ли способ задать чанк для одиночного фото, что бы было возможно настроить кадрирование изображения и сжатие?
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 страницы выведет результат, в зависимости от того, на какой странице я нахожусь. Разве нет? А главное меню должно на всех страницах быть одинаковым.