Олег Захаров
С нами с 14 октября 2017; Место в рейтинге пользователей: #74Lectoria 1st look, как я MODX изучал
Дисклеймер: Эта статья может быть полезной тем, кто только начал знакомство с MODX и ищет вводные темы. Статья носит исключительно информационный характер, упоминания всех ресурсов не преследуют рекламных целей, а не упоминание иных не является намеренным.
Я и MODX.
Забавно, что я оказался в числе бета-тестеров нового проекта Артема Зернова — lectoria.pro (курс: MODX: создание лендинга, быстрое погружение). Последним запрыгнул в группу из пяти человек. Моё знакомство с MODX началось с ютуб канала Артема- OpenModx (те самые двух часовые вебинары).
Я и MODX.
Забавно, что я оказался в числе бета-тестеров нового проекта Артема Зернова — lectoria.pro (курс: MODX: создание лендинга, быстрое погружение). Последним запрыгнул в группу из пяти человек. Моё знакомство с MODX началось с ютуб канала Артема- OpenModx (те самые двух часовые вебинары).
AjaxForm + Register
Нигде не нашел решения как сделать регистрацию из стандартного пакета Login через AjaxForm, ниже мое решение может кому пригодиться.
1 Размещаем сниппет AjaxForm где требуется (на странице, в попап окне и т.п.)
Рейтинга для размещения в разделе Решения не хватило, поэтому публикую здесь.
1 Размещаем сниппет AjaxForm где требуется (на странице, в попап окне и т.п.)
[[!AjaxForm?
&snippet=`custRegister`
&form=`tpl.register.form`
&submitVar=`signup-btn`
&activationResourceId=`9`
&activationEmailTpl=`lgnActivateEmailTpl`
&activationEmailSubject=`Thanks for Registering!`
&usergroups=`Users`
&usernameField=`email`
&generatePassword=`1`
&validate=`nospam:blank,
fullname:required:minLength=^3^,
email:required:email`
&placeholderPrefix=`reg.`
]]
2 Создаем чанк tpl.register.form с формой<form id="signup-form" action="[[~[[*id]]]]" method="post">
<input type="hidden" name="nospam">
<input type="hidden" name="password" value="11111111">
<input type="text" name="fullname">
<small class="alert-fullname"></small>
<input type="email" name="email">
<small class="alert-email"></small>
<input type="submit" name="signup-btn" form="signup-form" value="Signup">
</form>
3 Создаем сниппет custRegister<?php
$result = $modx->runSnippet('Register', $scriptProperties);
foreach($modx->placeholders as $key => $ph){
if(strpos($key, $scriptProperties[placeholderPrefix].'error.') === 0) $placeholders[$key] = $ph;
}
if($modx->getPlaceholder($scriptProperties[placeholderPrefix].'validation_error')) return $AjaxForm->error('Form has errors', array('error' => $placeholders));
else return $AjaxForm->success('Form is valid');
4 На странице с формой добавляем скрипт, который заполнит алерты или сообщит об успехе или еще все что угодно<script>
$(document).on('af_complete', function(event, response){
$.each(response.data.error, function(index, value){$(response.form).find('.alert-' + index.split(".").pop()).html(value);});
response.message='';//jGrowl - off
});
</script>
Вот и всё!Рейтинга для размещения в разделе Решения не хватило, поэтому публикую здесь.
Плюс и минус в каунте корзины MS2
Досточно простой вопрос, который мучает начинающих разработчиков. Решил поделиться решением, как сделать кнопки плюс и минус в корзине MS2. Что бы все было «по-фуншую»
Начнем c разметки. Я показываю на страндартной теме MS2. Вносим правки в чанк tpl.msCart
Начнем c разметки. Я показываю на страндартной теме MS2. Вносим правки в чанк tpl.msCart
...
<td class="count">
<form method="post" class="ms2_form" role="form">
<input type="hidden" name="key" value="{$product.key}"/>
<div class="form-group">
<div class="input-group input-group-sm qty">
<span class="input-group-prepend">
<span class="input-group-text minus input_count_action">-</span>
</span>
<input type="number" name="count" value="{$product.count}" class="form-control"/>
<span class="input-group-append">
<span class="input-group-text plus input_count_action">+</span>
<span class="input-group-text">{'ms2_frontend_count_unit' | lexicon}</span>
</span>
</div>
<button class="btn btn-sm" type="submit" name="ms2_action" value="cart/change">
↻</button>
</div>
</form>
</td>
...
Выведение опций товара по категориям
Сниппет msProductOptions выводит товары общим массивом. В принципе, никто не запрещает в чанке вывода делать с этим массивом всё что угодно, в том числе и делить по категориям. Однако всё чаще поступает запрос от клиента не только вывести категории, но и соблюсти их сортировку.
Для этих целей мне пришлось msProductOptions переписать. Мой вариант сниппета воспроизводит запрос msProductData::loadOptions с сортировкой по полю rank категории, затем группирует все опции по категориям с соблюдением сортировки самих опций.
Для этих целей мне пришлось msProductOptions переписать. Мой вариант сниппета воспроизводит запрос msProductData::loadOptions с сортировкой по полю rank категории, затем группирует все опции по категориям с соблюдением сортировки самих опций.
LazyLoad - Ленивая загрузка изображений (PHP)
Компонент перед отдачей html на фронтенд, выборочно заменяет src на заглушку (на стороне сервера), а после того как загрузилась страница, с помощью js изображения автоматически подгружаться в зависимости от положения полосы прокрутки.
[Theme.Bootstrap] Новая версия с Bootstrap 4
Привет, друзья!
Наконец-то у меня дошли руки до обновления Theme.Bootstrap, который не менялся аж с 2017 года. Причина проста — если переводить его на Bootstrap 4, то нужно менять и стандартные чанки у кучи дополнений, а это долго.
В итоге, вместе с Theme.Bootstrap были обновлены и:
Наконец-то у меня дошли руки до обновления Theme.Bootstrap, который не менялся аж с 2017 года. Причина проста — если переводить его на Bootstrap 4, то нужно менять и стандартные чанки у кучи дополнений, а это долго.
В итоге, вместе с Theme.Bootstrap были обновлены и:
- pdoTools
- miniShop2 (помимо чанков вошли еще несколько правок, см. changelog)
- mSearch2 (а здесь чанки даже на Fenom переписаны, ура!)
- Office
Экскурс как можно использовать vuejs в место extjs и не запариться.
Это не статься в стиле «я написал торт/тудушку/ещечтото на rea extjs и vue и вот что у меня получилось». Это просто инструкция как можно без особых усилий писать на чем-то стороннем (в моем случае vue).
(внимание) Так как на этом ресурсе сидят довольно опытные ребята, я не буду рассказывать все в подробностях, как поставить ноду + сопутствующее окружение, что такое modExtra, почему vue а не react/angular/свойвариант и т.д…
В общем погнали.
(внимание) Так как на этом ресурсе сидят довольно опытные ребята, я не буду рассказывать все в подробностях, как поставить ноду + сопутствующее окружение, что такое modExtra, почему vue а не react/angular/свойвариант и т.д…
В общем погнали.
Сортировка списка тикетов по просмотрам, рейтингу и дате ввода
Постоянно прошу… решил поделиться, может кому пригодится (экономия времени, к тому же).
Всем известен вывод pdoPage с выводом списка тикетов. Кроме того, многие знают о том, что в тикетах есть возможность подсчета количества просмотров и система оценок.
К сожалению (я так понимаю, может я и не прав) при превышении некоторого количества тикетов вся система начинает жутко тормозить, и, видимо, поэтому многое не афишируется.
У меня на сайте тикетов около 700 штук, я пока проблем не замечаю.
Решил сделать вывод списка тикетов с упорядочиванием по дате добавления, количеству просмотров и оценок пользователей (по убыванию и возрастанию по каждому из выборов).
Как это сделать проще всего?
Мне показалось, что лучше всего использовать ОДИН pdoPage с join-ами к соответствующим таблицам (TicketVote и TicketView) и выбором сортировки (orderby) и варианта его (sortby) из строки.
Всем известен вывод pdoPage с выводом списка тикетов. Кроме того, многие знают о том, что в тикетах есть возможность подсчета количества просмотров и система оценок.
К сожалению (я так понимаю, может я и не прав) при превышении некоторого количества тикетов вся система начинает жутко тормозить, и, видимо, поэтому многое не афишируется.
У меня на сайте тикетов около 700 штук, я пока проблем не замечаю.
Решил сделать вывод списка тикетов с упорядочиванием по дате добавления, количеству просмотров и оценок пользователей (по убыванию и возрастанию по каждому из выборов).
Как это сделать проще всего?
Мне показалось, что лучше всего использовать ОДИН pdoPage с join-ами к соответствующим таблицам (TicketVote и TicketView) и выбором сортировки (orderby) и варианта его (sortby) из строки.
Самые необходимые пакеты
Не знаю, зачем пишу) просто мысли в слух. Делал подсчет для одного клиента, и решил поделится. Сколько же стоит в сумме только набор компонентов для простого магазина, без настройки и прочего. Цены местами округлил, но какая разница.
Результат вот такой… =)
Сейчас конечно шикарная распродажа идет. Нужно будет достать заначку и накупить впрок))
Результат вот такой… =)
- Хсотинг 4000
- Яндекс касса mspYaCassa -500
- Доп опции msOptionsPrice2 — 990
- фильтрация и поиск mSearch2 — 2000
- Быстрый просмотр QuickView — 600
- Региональные цены msGLPrice — 1000
- Покупка в один клик msOneClick — 1000
- Связанные товары msAddLinked — 500
- Купоны, скидки msDiscount -1500
- Пункты выдачи msPointsIssue — 1500
- Личный кабинет Office — 2000
- Импорт экспорт msImportExport — 2000
- Связь с CRM Битрикс modBitrixCRM — 2000
- Итого:19590
Сейчас конечно шикарная распродажа идет. Нужно будет достать заначку и накупить впрок))
Как вывести определённые ресурсы через pdoResources в Fenom?
Всем привет. Столкнулся с проблемой при сборке сайта. Конструкция вроде этой:
{$_modx->runSnippet('!pdoResources', [
'resources' => '7,8,9,10',
'limit' => 4,
'tpl' => ''
])}
ничего не выводит. Как правильно вывести нужные ресурсы через pdoResources в Fenom?