Роман

Роман

С нами с 01 декабря 2018; Место в рейтинге пользователей: #2281

[YandexMaps2] Кейс. Точки из MIGX с кастомными иконками на фронт-энде


В этой заметке мы рассмотрим, какие чудеса можно творить при помощи события плагина ymOnLoadObjects. В данном случае, мы реализуем подгрузку точек из MIGX таблицы с возможностью указания своей иконки для точки.
Павел Гвоздь
30 ноября 2018, 06:45
modx.pro
2
1 660
+6

1 плагин - 3 лайвхака

Всем привет, порой работа менеджеров в админке modx — сущий ад. Сегодня поступил заказ с просьбой решить несколько проблем.

Проблема №1:
В tinyMCE все изображения которые вставляются имеют атрибуты width и height, и не имеют нужных классов

Проблема №2:
При загрузки файлов в каталог, где уже есть такое имя, файлы переписывают друг друга, необходимо было сделать добавление префикса для файлов с одинаковым именем

Проблема №3:
Иногда менеджеры грузят неприлично большие изображения, что непосредственно влияет и на скорость загрузки страницы и на общий размер файлов

Что делает плагин:
  1. Транслитерация файлов при загрузке, добавление префикса если файл дублируется
  2. Уменьшает загружаемое изображение до 1200px по ширине
  3. Из поля content достает все img, вырезает у них атрибуты width и height, вместо них подставляет класс img-thumbnail
Под катом — код с комментариями.
Pavel Zarubin
26 ноября 2018, 17:42
modx.pro
38
4 086
+19

fenom pdoResources default tpl

Вывожу сниппет
{'!pdoResources' | snippet: [
'parents' => $_modx->config['ds-id-events'],
'context' => $_modx->context.key,
'tpl' => '@FILE chunks/header_new_item.tpl',
'limit' => 3,
'depth' => 0,
'includeContent' => 1,
'sortby' => 'publishedon',
'sortdir' => 'ASC'
]}
Как сюда добавить — если результат пустой (default) выводить чанк header_new_item-default.tpl?
Сергей Самусев
24 ноября 2018, 21:47
modx.pro
1
2 705
0

[YandexMaps2] 1.1.2 Полноценная работа с mFilter2 и кастомизация плагинами


- Добавлен новый метод работы с mFilter2, поддерживающий вывод результатов в текстовом виде
- Добавлено событие плагина ymOnLoadObjects с параметрами: array $data, array $objects, array $snippetProperties
- Добавлен параметр objectsInScope в сниппет YandexMaps2
- Добавлена системная настройка ym2_objects_in_scope для бек-энда
- Добавлены параметры defaultIconContent, defaultIconCaption и defaultBalloonContent в сниппет YandexMaps2
- Добавлен параметр scrollZoom в сниппет YandexMaps2
- Добавлен перехват ошибки из-за некорректного JSON в default.js
- Поправлено большинство конфликтов, возникающих из-за повторной загрузки jQuery
Павел Гвоздь
19 ноября 2018, 08:21
modx.pro
2
2 492
+11

YandexMaps2 с напильником

На один сайт нужно яндекс карту совместимую с mFilter2. Приобрели YandexMaps2. Как оказалось, компонент не совсем подходит по наши нужды. Во первых, нужно в поиске чтоб высвечивались не только точки на карте, но и были ниже карты сами результаты поиска. Во вторых, нужно на карте выводить подпись и балун общие для всех точек. Так как это сделано на предыдущей версии сайта.

К счастью, нужный функционал оказалось не сложно допилить напильником. Под катом описание.
Александр Туниеков
26 октября 2018, 09:05
modx.pro
17
2 023
+17

Синтаксис Fenom и экранирование ковычек

Всем привет! Уже 2 дня не могу понять, почему феном выдает двойную кавычку, вместо одинарной и закрывает мне весь вызов.

Вот кусок кода:
<div class="popup_scrollbar">

	{var $frame_tpl} {ignore}
	<div class="popup_product_item" data-product-id="{$id}" data-product-prices="{$_modx->runSnippet('!msop2GetOptionsWithPrices', ['id ' => $id,'key ' => 'size ','price '=> ($id | resource : 'price ')]) | toJSON} ">
			<div class="_img"><img src="{$_pls['280x280 ']}" alt="{$pagetitle}" title="{$pagetitle}"></div>
			<div class="_title">{$pagetitle}</div>
			<div class="_title" style="font-size: 70%;font-style: italic;">Ширина: {$longtitle} см.</div>
			<div class="_details">
				<div class="_price"><span class="_price_num">{($id | resource : 'price ')}</span> {'ms2_frontend_currency ' | lexicon}</div>
				<div class="_select text-right">+</div>
				<div class="clear"></div>
			</div>
		</div>
		{/ignore}
		{/var}

		{var $frames = $_modx->runSnippet('msProducts ', [
			'parents ' => 38,
			'sortby ' => 'price ',
			'sortdir ' => 'ASC ',
			'includeThumbs ' => '280x280 ',
			'tpl ' => '@INLINE '~$frame_tpl,
			'tpl_n3 ' => '@INLINE '~$frame_tpl~'<div class="clear"></div>', ])} {$frames}

</div>
В итоге на фронте, как HTML он выводится вот так:
<div class="popup_scrollbar">

                                  
<div class="popup_product_item" data-product-id="{$id}" data-product-prices="{$_modx->runSnippet(" !msop2getoptionswithprices="" ',="" [="" 'id="" '=""> $id,
		'key ' =&gt; 'size ',
		'price ' =&gt; ($id | resource : 'price '),
	]) | toJSON}'&gt;
	<div class="_img"><img src="{$_pls['280x280']}" alt="{$pagetitle}" title="{$pagetitle}"></div>
	<div class="_title">{$pagetitle}</div>
	<div class="_details">
		<div class="_price"><span class="_price_num">{($id | resource : 'price')}</span> {'ms2_frontend_currency' | lexicon}</div>
		<div class="_select text-right">+</div>
		<div class="clear"></div>
	</div>
</div>


<div class="popup_product_item" data-product-id="{$id}" data-product-prices="{$_modx->runSnippet(" !msop2getoptionswithprices="" ',="" [="" 'id="" '=""> $id,
		'key ' =&gt; 'size ',
		'price ' =&gt; ($id | resource : 'price '),
	]) | toJSON}'&gt;
	<div class="_img"><img src="{$_pls['280x280']}" alt="{$pagetitle}" title="{$pagetitle}"></div>
	<div class="_title">{$pagetitle}</div>
	<div class="_details">
		<div class="_price"><span class="_price_num">{($id | resource : 'price')}</span> {'ms2_frontend_currency' | lexicon}</div>
		<div class="_select text-right">+</div>
		<div class="clear"></div>
	</div>
</div>


<div class="popup_product_item" data-product-id="{$id}" data-product-prices="{$_modx->runSnippet(" !msop2getoptionswithprices="" ',="" [="" 'id="" '=""> $id,
		'key ' =&gt; 'size ',
		'price ' =&gt; ($id | resource : 'price '),
	]) | toJSON}'&gt;
	<div class="_img"><img src="{$_pls['280x280']}" alt="{$pagetitle}" title="{$pagetitle}"></div>
	<div class="_title">{$pagetitle}</div>
	<div class="_details">
		<div class="_price"><span class="_price_num">{($id | resource : 'price')}</span> {'ms2_frontend_currency' | lexicon}</div>
		<div class="_select text-right">+</div>
		<div class="clear"></div>
	</div>
</div>
 
<div class="clear"></div>

<div class="popup_product_item" data-product-id="{$id}" data-product-prices="{$_modx->runSnippet(" !msop2getoptionswithprices="" ',="" [="" 'id="" '=""> $id,
		'key ' =&gt; 'size ',
		'price ' =&gt; ($id | resource : 'price '),
	]) | toJSON}'&gt;
	<div class="_img"><img src="{$_pls['280x280']}" alt="{$pagetitle}" title="{$pagetitle}"></div>
	<div class="_title">{$pagetitle}</div>
	<div class="_details">
		<div class="_price"><span class="_price_num">{($id | resource : 'price')}</span> {'ms2_frontend_currency' | lexicon}</div>
		<div class="_select text-right">+</div>
		<div class="clear"></div>
	</div>
</div>

</div>
То есть, тег закрывается намного раньше, но в ресурсе у меня нет там двойной кавычки, она одинарная)

Помогите пожалуйста разобраться, могу скинуть весь код.
Василий Перчиков
26 сентября 2018, 22:11
modx.pro
1
1 940
0

Как вывести checkbox в TicketForm?

Приветствую!
Есть tv — us_specialization. Тип ввода — checkbox.

@EVAL
$output = $modx->runSnippet('pdoResources',array(
  'context'=>$modx->resource->getOne('Context')->key,
  'parents'=>'10',
  'where'=>'{"published:=": 1}',
  'tpl'=>'@INLINE [[+pagetitle]]==[[+id]]',
  'outputSeparator'=>'||',
  'sortby'=>'menuindex',
  'sortdir'=>'ASC',
  'limit'=>'0',
  'showHidden'=>true));
return '||' . $output;
В parents 10 содержится список ресурсов.

В форме создания и редактирования тикета нужно вывести чекбоксы. Каждый чекбокс — отдельный ресурс.
Плюс нужно чтоб чекбоксы могли перезаписываться после сохранения на фронте.

Ума не приложу, как это можно сделать.
Кто с таким сталкивался? Подскажите!
Rootiys
16 сентября 2018, 11:10
modx.pro
1
1 173
0

Ускоряем массовое обновление ресурсов в 3 раза

Массовая выгрузка ресурсов, не такая уж простая задача, как может показаться на первый взгляд. Много подводных камней, касающихся улучшения производительности скрипта. Особенно неприятно, когда тормозит скорость работы из-за функционала ядра MODX.


Так, например, я столкнулся с куском кода в ядре, который увеличивает время выгрузки большого кол-ва товаров в ~3 раза, выполняя одно и то же ресурсоёмкое действие каждый раз, когда скрипт запускает обновление ресурса через процессор modResourceUpdateProcessor.

Сразу оговорю тот момент, что я не считаю этот кусок кода в ядре лишним или вредным, нет! Я полагаю, что этот код при обновлении большого кол-ва ресурсов можно выполнить самостоятельно по окончании работы скрипта выгрузки.

Я говорю вот об этой строчке кода. Давайте попробуем разобраться, что же с ней не так!
Павел Гвоздь
11 сентября 2018, 14:29
modx.pro
28
2 347
+19

Оптимизация сайта на MODX

Мне дали задание оптимизировать сайт https://mebmart.by для https://developers.google.com/speed/pagespeed/insights/. Я с задачей оптимизации сталкиваюсь первый раз. К сожалению, инструкций по оптимизации сайта на MODX не нашел. Поэтому хочу сделать такую инструкцию. Надеюсь, в комментариях, более опытные разработчика подскажут что и как еще можно сделать.
Александр Туниеков
06 августа 2018, 00:08
modx.pro
23
5 906
+5

Как заполнить элемент Description для 1 тыс ресурсов?

Доброго всем времени суток. Ребята подскажите как быть. Есть сайт около 1 тыс ресурсов у каждого ресурса отсутствует элемент description. Есть файл excel в котором есть url страницы и description для данной страницы. Задача как залить вс это дело в базу данных чтобы description присвоился правильно для каждой страницы.
Клевер
02 августа 2018, 07:48
modx.pro
1
883
0