Блог

MODx

В этом разделе собран интересный материал по MODx Revolution — новейшей системе управления сайтами на базе MODx. Она многофункциональная: на данной платформе можно создавать и дорабатывать лендинги, интернет-магазины и другие сайты. MODx Revolution — прогрессивная, очень удобная, в полной мере соответствующая вызовам времени. 

На своём блоге я постоянно выкладываю статьи по этой системе. MODx Revolution активно развивается, её поддерживает мощная команда разработки. И я делюсь теми фишками, которые нашёл и протестировал.

MODx

Ссылка на репозиторий: https://github.com/litosh-web/sampleModextra

Данный репозиторий хранит пример транпортировчного пакета для MODx Revolution 2.8.
Склонируйте его в папку _build в свой проект, запущенный на локальном сервере, с помощью команды git clone.

Подробнее
MODx

Была проблема с тем, что FormIt никак не возвращал ошибку на return false; и просто отправлял форму со знаком успех.

Подробнее
MODx

Ошибка:

[onlineChat] Could not load controller file: /public_html/core/components/onlinechat/controllers/web/onlineChat.php

Решение:

В данном случае название файла было с БОЛЬШОЙ буквы и из-за этого он не находил сам файл.

Подробнее
MODx

JavaScript событие msOptionsPrice при переключении опции:

$(document).on('msoptionsprice_product_action', function (e, action, form, response) {
    if (response.data.modification.name) {
   
    }
});

Подробнее
MODx

В MODx в кэш можно записать любые значения. И хранить можно даже многоуровневые массивы. Например, какой-то процесс забирает очень много времени. Отличная идея - записать его в кэш при первом выполнении. Тогда другие пользователи вашего сайта, уже получат записанные данные. А получение их будет максимально быстрым.

// Записываем данные в раздел кеша по умолчанию со сроком действия 2 часа.
$modx->cacheManager->set('testdata', $str, 7200);

// Получаем данные из кеша снова. Возвращается ноль, если кеш недоступен или срок его действия истек.
$str = $modx->cacheManager->get('testdata');

Очистить записанные значения можно через админку: Управление - Очистить кэш.

Подробнее
MODx

Процессор для массового удаления из избранного. Принимает значения ids - ID товаров.

 

core/components/custom/processors/web/favorites/remove.class.php

<?php
require_once MODX_CORE_PATH . 'model/modx/modprocessor.class.php';

class RemoveFromFavoritesCustom extends modProcessor
{
    public $objectType = 'modResource';
    public $classKey = 'modResource';

    public function process()
    {
        $ids = $this->getProperty('ids');

        $msFavorites = $this->modx->getService('msfavorites.msFavorites', '', MODX_CORE_PATH . 'components/msfavorites/model/');

        if ($msFavorites) {
            foreach ($ids as $id) {
                $output = $msFavorites->processMethod([
                    'ctx' => 'web',
                    'method' => 'remove',
                    'key' => $id,
                    'list' => 'default',
                    'type' => 'resource',
                    'service' => 'msfavorites',
                    //'action' => 'favorites/multiple'
                ]);
            }
        }

        $output = $this->modx->fromJSON($output);

        if ($output['success'] == true) {
            $output_2 = $output['data'];
        }

        return $this->success('', [
            'remove_ids' => $ids,
            'output' => $output_2
        ]);

    }

}

return 'RemoveFromFavoritesCustom';

Подробнее
MODx

Процессор для массового добавления в корзину minishop2. Принимает значения ids - ID товаров.

 

core/components/custom/processors/web/cart/add.class.php

<?php
require_once MODX_CORE_PATH . 'model/modx/modprocessor.class.php';

class AddToCartCustom extends modProcessor
{
    public $objectType = 'modResource';
    public $classKey = 'modResource';

    public function process()
    {
        $ids = $this->getProperty('ids');

        if ($miniShop2 = $this->modx->getService('miniShop2')) {
            // Инициализируем класс в текущий контекст
            $miniShop2->initialize('web');

            foreach ($ids as $id) {
                $obj = $this->modx->getObject('msProduct', $id);
                $nalichie = $obj->get('vnalich')[0];
                if ($nalichie != 'Под заказ') {
                    $response = $miniShop2->cart->add($id, 1);
                }
            }

            $data = $miniShop2->cart->status();
            $response['data'] = $data;
            $response['message'] = 'Количество товаров в корзине успешно изменено: ' . $data['total_count'];

            return $this->success($response['message'], $data);
        }

    }

}

return 'AddToCartCustom';

Подробнее
MODx

После переноса сайта на локальный компьютер и при установке компонента вылезла данная ошибка sql field 'id' doesn't have a default value.

Из-за этого не создавались никакие плагины или категории, а также ресурсы. Оказалось, что это происходит из-за непроставленного в базе данных сайта атрибута AUTO_INCREMENT, который автоматически проставляет ID каждому объекту. После переноса, он с чего-то был не проставлен.

 

Решение: переустановить базу данных с проставленным атрибутом AUTO_INCREMENT в сущностях базы MODx.

Подробнее