Андрей
С нами с 09 апреля 2015; Место в рейтинге пользователей: #68Удаление ресурсов в MODX Revolution
Здравствуйте. Подскажите, пожалуйста, как программно из фронтенда удалять ресурсы? Вывожу ресурсы с помощью getPage, где для каждого ресурса генерится ссылка-кнопка «Удалить». Как реализовать это? Заранее спасибо!
Вывод производителей на отдельной странице
Как вывести всех производителей на отдельной странице?
Так я вывожу всех производителей у товаров. Вернее товар и его производителя.
А как отдельно вывести производителя. Т.е. по типу брендов товаров.
У каждого бренда есть свои товары а как сделать страницу с брендами что бы ссылка вела на фильтр?
На странице брендов есть вызов:
Так я вывожу всех производителей у товаров. Вернее товар и его производителя.
А как отдельно вывести производителя. Т.е. по типу брендов товаров.
У каждого бренда есть свои товары а как сделать страницу с брендами что бы ссылка вела на фильтр?
На странице брендов есть вызов:
[[!getPage?
&element=`msProducts`
&tpl=`tpl.msProducts.brands.row`
&parents=`0`
&sortby=`Data.vendor`
&sortdir=`ASC`
&limit=`50`
&showLog=`0`
]]
А в tpl.msProducts.brands.row<h3 class="tname">[[+vendor.name]]</h3>
<img src="[[+vendor.logo]]" ></div>
Первичный ключ xPDOObject
Как известно, при создании собственных таблиц в MODX принято наследовать или xPDOSimpleObject, или xPDOObject.
Отличие между ними ровно одно — в SimpleObject уже прописан первичный ключ id, а в Object — нет. То есть, если вы хотите, чтобы у вашей таблицы создавалось поле id с становилось primary key — нужно наследовать SimpleObject.
Я, однако, люблю простые таблицы ключ-значение, в которые добавляю первичным ключом два и более полей сразу. Например, в репозитории пакет может быть в нескольких категориях, значит нужно создать таблицу extraCategoryMember из двух полей category_id и package_id.
Ключ id мне здесь совершенно не нужен, ведь он будет расти при каждой операции добавления пакета в категорию, а таких операций может быть очень много. Конечно, вряд ли INT(10) скоро закончится, но зачем хранить лишнее?
Отличие между ними ровно одно — в SimpleObject уже прописан первичный ключ id, а в Object — нет. То есть, если вы хотите, чтобы у вашей таблицы создавалось поле id с становилось primary key — нужно наследовать SimpleObject.
Я, однако, люблю простые таблицы ключ-значение, в которые добавляю первичным ключом два и более полей сразу. Например, в репозитории пакет может быть в нескольких категориях, значит нужно создать таблицу extraCategoryMember из двух полей category_id и package_id.
Ключ id мне здесь совершенно не нужен, ведь он будет расти при каждой операции добавления пакета в категорию, а таких операций может быть очень много. Конечно, вряд ли INT(10) скоро закончится, но зачем хранить лишнее?
miniShop2 — работа с оптовыми ценами
Подскажите, пожалуйста, каким образом в miniShop2 можно работать с оптовой ценой (которая будет вводится к примеру в tv [[*opt_price]])? Задача, чтобы для простого юзера в каталоге и в корзине цена была розничная, а для авторизованного (через HybridAuth) — оптовая.
Вопрос про процессор security/user/create
Здравствуйте!
Не подскажите где почитать про процессоры более подробно?
Почему MODx игнорирует указанный мной пароль и генерирует свой?
Не подскажите где почитать про процессоры более подробно?
Почему MODx игнорирует указанный мной пароль и генерирует свой?
last-modified + MS2
Хотел сегодня с помощью плагина, настроить отдачу заголовка last-modified.
И получил глюк корзины. То товары добавляются, то нет, то удалить нельзя из корзины.
Ошибок в журнале нету, все запросы типа проходят, но ничего не меняется.
Куда копать?
Плагин работает по событию:
И получил глюк корзины. То товары добавляются, то нет, то удалить нельзя из корзины.
Ошибок в журнале нету, все запросы типа проходят, но ничего не меняется.
Куда копать?
Плагин работает по событию:
OnLoadWebDocument
Вот код плагина:<?php
if($modx->event->name!='OnLoadWebDocument') return;
if(!empty($_SERVER['HTTP_IF_MODIFIED_SINCE'])){
$lastMod = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
if($modx->resource->editedon <= $lastMod){
header("HTTP/1.0 304 Not Modified");
header("Cache-control: private, max-age = 3600");
header('Expires: '.gmdate('D, d M Y H:i:s', time()+3600));
exit();
}
}
header("Cache-control: private, max-age = 3600");
header('Expires: '.gmdate('D, d M Y H:i:s', time()+3600));
header("Last-Modified: " . gmdate('D, d M Y H:i:s', $modx->resource->editedon) . " GMT");
return;
Работа с phpThumb
Не многие задумывались, что вместе с MODX Revolution поставляется и phpThumb. Это, фактически, единственная и самая крутая библиотека для работы с изображениями на PHP.
В MODX принято работать с ней через сниппет phpThumbOf, однако у него есть существенные недостатки, например серьёзные тормоза и странное кэширование. Поэтому, верным способом будет работа с библиотекой напрямую.
При разработке "Файлохранилища" мне пришлось покопаться в том, как устроен phpThumb и как он интегрирован в MODX, в результате чего появился универсальный рецепт использования этой библиотеки для генерации изображений.
Заодно решил известную проблему с генерацией уменьшенной копии, с обрезкой из левой верхней части картинки.
IDE phpStorm как инструмент разработки в MODX
Долгое время я пользовался простыми и быстрыми редакторами для разработки, типа Geany и Notepad++. Просто не понимал, зачем мне тяжеловесная IDE, если и этих редакторов хватает с головой?
Я помню свой код, что откуда выходит и как работает, зачем мне подсказки от программы, которая грузится полторы минуты? Тем более, я люблю по-быстрому забежать на сервер, подправить пару опечаток и сохранить файл. Мне не нужно создавать проект, синхронизировать его с сервером и т.д.
Однако, всё поменялось, когда я написал miniShop. Компонент вышел большой, и со временем я понял, что просто запутываюсь в нём. Заодно я понял, что допустил много грубых ошибок, по незнанию — например доставучие уведомления о необъявленных переменных или ключах массива, те самые — E_NOTICE.
Поэтому, когда я засел за Tickets, сразу решил писать его в IDE phpStorm, чтобы таки разобраться в ней и упростить себе разработку. Поначалу было непросто, но я быстро втянулся.
Сразу говорю, всё освоено методом тыка, без чтения литературы или чьих-то инструкций. Подозреваю, что освоил я процентов 5 от общего функционала, однако и этот объем позволил мне работать радикально быстрее и выдавать в разы более качественный код.
Я помню свой код, что откуда выходит и как работает, зачем мне подсказки от программы, которая грузится полторы минуты? Тем более, я люблю по-быстрому забежать на сервер, подправить пару опечаток и сохранить файл. Мне не нужно создавать проект, синхронизировать его с сервером и т.д.
Однако, всё поменялось, когда я написал miniShop. Компонент вышел большой, и со временем я понял, что просто запутываюсь в нём. Заодно я понял, что допустил много грубых ошибок, по незнанию — например доставучие уведомления о необъявленных переменных или ключах массива, те самые — E_NOTICE.
Поэтому, когда я засел за Tickets, сразу решил писать его в IDE phpStorm, чтобы таки разобраться в ней и упростить себе разработку. Поначалу было непросто, но я быстро втянулся.
Сразу говорю, всё освоено методом тыка, без чтения литературы или чьих-то инструкций. Подозреваю, что освоил я процентов 5 от общего функционала, однако и этот объем позволил мне работать радикально быстрее и выдавать в разы более качественный код.
Самые быстрые сниппеты с pdoTools
Давно изместно, что xPDO не нужен для выборки и вывода большого количества данных. Зачем его использовать, создавая кучу объектов, жрать процессор и память, если мы хотим просто выбрать 100 строк из БД и вывести их на экран?
Тут больше подойдет специальный сниппет, который будет работать через PDO, без объектов. Таких сниппетов я написал немало, и в один момент мне надоело их копипастить с разных проектов и изменять.
Тогда я написал себе список хотелок:
— Быстрое создание готового сниппета.
— Любые выборки, из любых таблиц с любыми условиями и джоинами.
— Учет времени на каждую операцию, подробный лог для выявления узких мест.
— Итоговые сниппеты должны работать с getPage, автоматически.
— Лёгкая кастомизация, оно не должно меня ограничивать.
— Самый быстрый рендер чанков, быстрее только вообще без них.
Simple Dream дали добро на это дело, и в итоге вышла мини-библиотека pdoTools, которая уже входит в состав Tickets и войдёт в miniShop2.
Она отвечает всем моим требованиям и позволяет писать самые быстрые сниппеты для MODX Revolution, всего за 10 минут.
Тут больше подойдет специальный сниппет, который будет работать через PDO, без объектов. Таких сниппетов я написал немало, и в один момент мне надоело их копипастить с разных проектов и изменять.
Тогда я написал себе список хотелок:
— Быстрое создание готового сниппета.
— Любые выборки, из любых таблиц с любыми условиями и джоинами.
— Учет времени на каждую операцию, подробный лог для выявления узких мест.
— Итоговые сниппеты должны работать с getPage, автоматически.
— Лёгкая кастомизация, оно не должно меня ограничивать.
— Самый быстрый рендер чанков, быстрее только вообще без них.
Simple Dream дали добро на это дело, и в итоге вышла мини-библиотека pdoTools, которая уже входит в состав Tickets и войдёт в miniShop2.
Она отвечает всем моим требованиям и позволяет писать самые быстрые сниппеты для MODX Revolution, всего за 10 минут.