Василий Столейков
С нами с 19 декабря 2012; Место в рейтинге пользователей: #25Делимся приемами оптимизации под Google PageSpeed
Поделитесь опытом, кто как оптимизирует сайт? Кто набирает 85 баллов на продуктовой странице или на странице категории товаров, то есть на тех, где minishop2 свои ресурсы подключает?
DNS хостинг на modhost.pro
Привет, друзья! У нас очередное обновление нашего любимого modhost.pro.
Начнём с приятной новости, которую я в своё время не стал публиковать — мы установили на сервис замечательный файловый менеджер Sprut.io. Это Open Source приложение, разработанное мастерами Beget, которое мы чуть-чуть модифицировали и теперь вы можете эффективно работать со своими файлами прямо в браузере.
Для этого у вас появилась ссылка в меню сайта и на странице информации:
При клике вы перейдете в менеджер, который выглядит вот так:
Интерфейс написан на всеми нелюбимом ExtJS =)
Начнём с приятной новости, которую я в своё время не стал публиковать — мы установили на сервис замечательный файловый менеджер Sprut.io. Это Open Source приложение, разработанное мастерами Beget, которое мы чуть-чуть модифицировали и теперь вы можете эффективно работать со своими файлами прямо в браузере.
Для этого у вас появилась ссылка в меню сайта и на странице информации:
При клике вы перейдете в менеджер, который выглядит вот так:
Интерфейс написан на всеми нелюбимом ExtJS =)
Использование модификаторов Fenom в PHP
Заметка коротенькая, но может быть полезной.
Все знают, что мы можем добавлять собственные модификаторы Fenom на событие pdoToolsOnFenomInit. А как быть, если мы хотим потом использовать этот же модификатор не в чанках и шаблонах, а в своих PHP скриптах?
А очень просто:
Все знают, что мы можем добавлять собственные модификаторы Fenom на событие pdoToolsOnFenomInit. А как быть, если мы хотим потом использовать этот же модификатор не в чанках и шаблонах, а в своих PHP скриптах?
А очень просто:
$pdoTools = $modx->getService('pdoTools');
$string = 'Some very very long string';
if ($truncate = $pdoTools->getFenom()->getModifier('truncate')) {
$string = $truncate($string, 10);
}
return $string;
Здесь мы получаем модификатор truncate и обрезаем строку до 10 символов, если она больше. mFilter2 и оптимизация скорости на 7k товарах
Всем, кто хоть раз пытался завести mFilter2 на большом кол-ве товаров и хотя-бы 10 опциях в фильтре, известно, что тормозов не избежать. Вот и мне попался на днях сайт, в котором, казалось бы, всего-то 7000 товаров и 10 опций на странице каталога. Однако сниппет фильтра отрабатывал за 3-4 секунды. Переписал на Fenom — стал отрабатывать за 2-3 секунды.
Не годится! Тем более, что у заказчика было требование: «Чтобы сайтом было комфортно пользоваться». Что-ж, взял задачу — надо решать!
Дебаг показал, что проблема в методе mse2FiltersHandler::getMsOptionValues, а именно в запросе (7k товаров!), который выглядит как-то так:
SELECT `product_id`, `key`, `value` FROM `modx_ms2_product_options` AS `msProductOption`
WHERE (`msProductOption`.`product_id` IN (3394,3408,еще 7 тысяч ID)
AND `msProductOption`.`key` IN ('atr_n1','atr_n6','atr_n5','atr_n12','atr_n43','atr_n46','atr_n29','atr_n11','atr_n44','atr_n2'))
[xLike] Идеальная система лайков с оптимистичным интерфейсом и правильной формулой
Пакет довольно прост и одновременно функционален. Выполняет систему рейтинга для любого объекта, по-умолчанию, для ресурсов. Чем-то напоминает систему лайков на YouTube, в частности, в пакете реализован оптимистичный интерфейс.
Также, особенностью компонента является правильный подсчет рейтинга на основе вычисления нижней границы доверительного интервала Вильсона для параметра Бернулли. По-простому: эта формула не даст встать новым записям с 1 лайком и 0 дизлайками выше более старых записей с сильным рейтингом.
Список преимуществ:
Также, особенностью компонента является правильный подсчет рейтинга на основе вычисления нижней границы доверительного интервала Вильсона для параметра Бернулли. По-простому: эта формула не даст встать новым записям с 1 лайком и 0 дизлайками выше более старых записей с сильным рейтингом.
Список преимуществ:
- Оптимистичный интерфейс,
- Наиболее правильная формула вычисления рейтинга,
- Работа с любыми объектами (modResource, modUser, кастомные объекты),
- Голосование гостями,
- Анимированное изменение полосы/числа рейтинга,
- Событие плагина — xLikeOnVote.
Обновление modhost.pro
Пока вокруг пора отпусков и затишье, мы подготовили и запустили обновление modhost.pro.
На этот раз обновили внешний вид и добавили больше сходства с modstore.pro, точнее говоря, понадёргали оттуда оформление и скрипты, перекрасив в синий цвет.
Шучу, всё было не так просто, конечно. Под катом список изменений.
На этот раз обновили внешний вид и добавили больше сходства с modstore.pro, точнее говоря, понадёргали оттуда оформление и скрипты, перекрасив в синий цвет.
Шучу, всё было не так просто, конечно. Под катом список изменений.
DiscountMS2 - Скидки для категорий товаров
Поздравляю всех (или сочувствую всем, спорный вопрос) с началом новой рабочей недели!
Наклепал свой первый более-менее серьезный компонент, хочу представить на суд общественности.
Компонент предназначен для выставления скидки внутри категорий. Поддерживает мультикатегории и указание глубины поиска товаров.
Есть возможность указания скидки как со страницы компонента, так и через TV.
Вот так выглядит страница в админке:
Вот так — указание скидки через ТВ:
Добавление новой скидки:
Наклепал свой первый более-менее серьезный компонент, хочу представить на суд общественности.
Компонент предназначен для выставления скидки внутри категорий. Поддерживает мультикатегории и указание глубины поиска товаров.
Есть возможность указания скидки как со страницы компонента, так и через TV.
Вот так выглядит страница в админке:
Вот так — указание скидки через ТВ:
Добавление новой скидки:
Office 1.5 - авторизация на фронтенде
Привет, друзья!
В связи с отключением дополнений от MODX-клуба, а соответственно и отсутствием исправлений в SwitchUser, которых мне не хватало, представляю вам новую версию Office c функционалом авторизации на фронтенде из админки.
Отличия от SwitchUser:
— Ссылка на авторизацию выводится только для активных пользователей.
— Помимо пункта меню в списке пользователей, выводится и кнопка на панели редактирования пользователя. Причём, она реагирует на отключение и блокировку юзера при редактировании, становясь неактивной.
— Авторизация всегда происходит в новом окне, админка не закрывается.
— Юзер авторизуется сразу во все контексты, если может.
— Нет чёрного окошка на фронтенде.
В связи с отключением дополнений от MODX-клуба, а соответственно и отсутствием исправлений в SwitchUser, которых мне не хватало, представляю вам новую версию Office c функционалом авторизации на фронтенде из админки.
Отличия от SwitchUser:
— Ссылка на авторизацию выводится только для активных пользователей.
— Помимо пункта меню в списке пользователей, выводится и кнопка на панели редактирования пользователя. Причём, она реагирует на отключение и блокировку юзера при редактировании, становясь неактивной.
— Авторизация всегда происходит в новом окне, админка не закрывается.
— Юзер авторизуется сразу во все контексты, если может.
— Нет чёрного окошка на фронтенде.
settingsWidget - настройки в панели управления
Это маленькое дополнение предназначено для показа выбранных настроек на панели управления MODX.
Добавить виджет на панель: Панели — Default — Редактировать панель — Добавить виджет — Быстрые настройки.
В системной настройке settingswidget_keys указать через запятую список ключей настроек. Например, так:
Дополнение целиком и полностью бесплатно и доступно в Modstore: settingsWidget.
Добавить виджет на панель: Панели — Default — Редактировать панель — Добавить виджет — Быстрые настройки.
В системной настройке settingswidget_keys указать через запятую список ключей настроек. Например, так:
site_name,site_status,emailsender,error_page
Эти перечисленные настройки и будут отображаться в виждете.Дополнение целиком и полностью бесплатно и доступно в Modstore: settingsWidget.
Добавление пользователя в другую группу
Добрый день!
Натолкнулся на снипет который сделал Николай https://modx.pro/help/9699/, чтобы добавить всех пользователей из одной группы в другую.
<?php
$usergroup = 4;
$c = $modx->newQuery('modUser');
$c->innerJoin ('modUserProfile','Profile');
$c->innerJoin ('modUserGroupMember','UserGroupMembers');
$c->innerJoin ('modUserGroup','UserGroup','`UserGroupMembers`.`user_group` = `UserGroup`.`id`');
$c->leftJoin ('modUserGroupRole','UserGroupRole','`UserGroupMembers`.`role` = `UserGroupRole`.`id`');
$c->where(array(
'UserGroupMembers.user_group' => $usergroup,
'UserGroupMembers.role' => '1',
));
$users = $modx->getCollection('modUser',$c);
foreach($users as $user) {
$user->joinGroup(11,1);
}
Снипет работает, добавляет всех пользователей, но подскажите, что нужно изменить в снипете, чтобы не всех пользователей из одной группы добавляло в другую группу, а только одного. Или может есть другое решение. Нужно для того, чтобы зарегистрированные при нажатии кнопки «Стать партнером» попадали в другую группу.
Натолкнулся на снипет который сделал Николай https://modx.pro/help/9699/, чтобы добавить всех пользователей из одной группы в другую.
<?php
$usergroup = 4;
$c = $modx->newQuery('modUser');
$c->innerJoin ('modUserProfile','Profile');
$c->innerJoin ('modUserGroupMember','UserGroupMembers');
$c->innerJoin ('modUserGroup','UserGroup','`UserGroupMembers`.`user_group` = `UserGroup`.`id`');
$c->leftJoin ('modUserGroupRole','UserGroupRole','`UserGroupMembers`.`role` = `UserGroupRole`.`id`');
$c->where(array(
'UserGroupMembers.user_group' => $usergroup,
'UserGroupMembers.role' => '1',
));
$users = $modx->getCollection('modUser',$c);
foreach($users as $user) {
$user->joinGroup(11,1);
}
Снипет работает, добавляет всех пользователей, но подскажите, что нужно изменить в снипете, чтобы не всех пользователей из одной группы добавляло в другую группу, а только одного. Или может есть другое решение. Нужно для того, чтобы зарегистрированные при нажатии кнопки «Стать партнером» попадали в другую группу.