Для разработчиков
Генерация расписания занятий на pdoTools
Увидел недавно вопрос на сообществе — человек хочет сгенерировать таблицу с расписанием занятий по дням.
Казалось бы, задача несложная, но это совсем не так. Стандартные сниппеты не предназначены для такой работы и их приходится запускать на каждый день недели. И даже если вас не волнует скорость работы, то в итоговой таблице будут пропущенные ячейки, что совсем не айс.
Можно сделать свой компонент расписаний, но это нужно далеко не всем, тем более, для вывода всего одной недели из дерева.
Поэтому предлагаю вам готовое решение, а заодно и демонстрацию работы с pdoTools. Конечно, можно было бы обойтись и родными методами MODX, но с ним быстрее.
Все нужные данные выбираются за один запрос, а дальше очень быстрая обработка и оформление на PHP.
Phpthumb наложение водяного знака
Долго искал эту документацию по наложению ватермарок на изображения.
По-итогу все оказалось просто, документация ниже по ссылке, и выдержка здесь.
Мой пример: (Ватермарка по центру изображения)
Настройки источника файлов, параметр thumbnails
По-итогу все оказалось просто, документация ниже по ссылке, и выдержка здесь.
Мой пример: (Ватермарка по центру изображения)
Настройки источника файлов, параметр thumbnails
{"w":500,"h":378,"q":95,"zc":"1","bg":"000000","fltr":"wmt|текст-ватермарки|20|C|48a4a5|Ubuntu-R.ttf|90|20|5||0|"}
wmt|текст|размер-шрифта|выравнивание|цвет|шрифт|прозрачность|отступ|поворот|цвет-фона|прозрачность-фона|направление
Подавление ошибок php
Некоторое время назад мне сделали замечание, что использовать @ — «плохая привычка». На предложение доказать, что это именно так, я получил ссылку на Хабр, со статьей про управление ошибками.
Окей, наконец-то я узнал, как именно ими управлять, но чем же плоха привычка подавлять сообщения об ошибках, если ты знаешь, что делаешь?
На мой взгляд, плохого здесь нет и быть не может. Применение @ — это такое же управление ошибками, как и функция error_reporting() или директива в php.ini.
Однако, детальный разбор показал несколько иное.
Окей, наконец-то я узнал, как именно ими управлять, но чем же плоха привычка подавлять сообщения об ошибках, если ты знаешь, что делаешь?
На мой взгляд, плохого здесь нет и быть не может. Применение @ — это такое же управление ошибками, как и функция error_reporting() или директива в php.ini.
Однако, детальный разбор показал несколько иное.
Первичный ключ 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) скоро закончится, но зачем хранить лишнее?
Установка компонентов через MODX API
Предлагаю всем желающим готовую функцию для установки компонентов через Api.
Можно делать из консоли, можно из сниппета — не важно. Собственно загрузка файла выделена в отдельную функцию, которая пытается работать через file_get_contents(), если это не запрещено. Иначе использует cUrl.
Параметров всего 2: имя компонента и id провайдера пакетов (по умолчанию — 1, то есть, modx.com).
Можно делать из консоли, можно из сниппета — не важно. Собственно загрузка файла выделена в отдельную функцию, которая пытается работать через file_get_contents(), если это не запрещено. Иначе использует cUrl.
Параметров всего 2: имя компонента и id провайдера пакетов (по умолчанию — 1, то есть, modx.com).
Динамические функции на замену фильтрам
Очередная модель от известного велосипедостроителя — меня.
Суть в следующем: заменить все фильтры в чанке на функции внутри сниппета, сделанного на pdoTools.
При этом, сами фильтры должны лежать как и раньше, сниппетами, а не быть жестко закодированы, чтобы их можно было удобно изменять и использовать также в в плагинах, или еще где.
Суть в следующем: заменить все фильтры в чанке на функции внутри сниппета, сделанного на pdoTools.
При этом, сами фильтры должны лежать как и раньше, сниппетами, а не быть жестко закодированы, чтобы их можно было удобно изменять и использовать также в в плагинах, или еще где.
[miniShop2] Первый релиз, бета 0
Бета с индеком 0 доступна в репозитории. Нулевая она потому, что я не успел сделать оформление и управление заказами и решил привести в порядок то, что есть, а не торопиться и делать тяп-ляп.
Но обещание выпустить в конце этой недели было дано и его нужно выполнять. Поэтому, бета 0, «для посмотреть».
Магазин на ней построить нельзя, но любопытство утолить — очень даже. Хотя, если вам не нужны заказы — то можно уже использовать по полной!
Также, в поддержку, запустил отдельный сайт на котором открыта админка — minishop2.com.
Не все читают «звезданутые» заметки, поэтому я коротко расскажу, что нового в MS2. В двух словах — всё переписано с нуля, от miniShop осталось только название.
Но обещание выпустить в конце этой недели было дано и его нужно выполнять. Поэтому, бета 0, «для посмотреть».
Магазин на ней построить нельзя, но любопытство утолить — очень даже. Хотя, если вам не нужны заказы — то можно уже использовать по полной!
Также, в поддержку, запустил отдельный сайт на котором открыта админка — minishop2.com.
Не все читают «звезданутые» заметки, поэтому я коротко расскажу, что нового в MS2. В двух словах — всё переписано с нуля, от miniShop осталось только название.
[miniShop2] Первый тест на скорость
Инструментарий программиста
Еще один текст с modcoach.info, в котором я рассказываю чем работаю с сервером.
Сразу говорю, разные Denwer и подобные приложения, эмулирующие GNU/Linux веб-сервер на Windows я не использую. Это потому, что на мой взгляд, разрабатывать сайты и приложения нужно в той среде, в которой он будет работать (или в очень похожей).
Не знаю, как сейчас дела у современных эмуляторов, но вряд ли у них есть php-apc, запуск заданий по cron, разные права доступа для разных юзеров, указание процессов php дляя каждого сайта, командный интерпретатор bash и прочие нативные фишки линуксового окружения.
Поэтому, мой выбор — свой собственный VPS или VirtualBox. Для первого случая заметка тут, а для второго — тут.
Не важно, что вы выберете, главное, что по определенному адресу у вас будет настоящий GNU/Linux. Шеф-повар рекомендует Ubuntu.
Сразу говорю, разные Denwer и подобные приложения, эмулирующие GNU/Linux веб-сервер на Windows я не использую. Это потому, что на мой взгляд, разрабатывать сайты и приложения нужно в той среде, в которой он будет работать (или в очень похожей).
Не знаю, как сейчас дела у современных эмуляторов, но вряд ли у них есть php-apc, запуск заданий по cron, разные права доступа для разных юзеров, указание процессов php дляя каждого сайта, командный интерпретатор bash и прочие нативные фишки линуксового окружения.
Поэтому, мой выбор — свой собственный VPS или VirtualBox. Для первого случая заметка тут, а для второго — тут.
Не важно, что вы выберете, главное, что по определенному адресу у вас будет настоящий GNU/Linux. Шеф-повар рекомендует Ubuntu.
[miniShop2] Работа с ajaxManager
Возможно, miniShop2 будет первым компонентом, 100% совместимым с ajaxManager. Во всяком случае, я очень стараюсь так сделать.