Владимир Новопашин

Владимир Новопашин

Был в сети 08 октября 2018, 15:51
Заказы не принимаю
Нет, подмены никакой. Просто создается огромная таблица, основа которой — связи с данными кто мастер и кто раб. Затем джойнятся соответствующие таблицы чтобы была еще и вся информация и у мастера и у раба. Получается огромная таблица со всеми данными и дальше уже можем фильтровать по чему угодно, просто в where указывать msProductMaster. или msProductSlave. перед названием поля по которому выборка.
В общем-то, делается это примерно так
<?php

$query = $modx->newQuery('msProductLink');
$query->leftJoin('msProduct', 'msProductMaster', 'msProductLink.master = msProductMaster.id');
$query->leftJoin('msProductData', 'msProductDataMaster', 'msProductLink.master = msProductDataMaster.id');
$query->leftJoin('msProduct', 'msProductSlave', 'msProductLink.slave = msProductSlave.id');
$query->leftJoin('msProductData', 'msProductDataSlave', 'msProductLink.slave = msProductDataSlave.id');
if (isset($where)){
    $query->where($where);
}
$query->groupby('msProductLink.slave');

$links = $modx->getCollection('msProductLink', $query);

$results = array();
foreach($links as $id => $link){
    $ids = explode('-', $id);
    $results[] = $ids[2];
}
$output = implode(',', $results);

return $output;
Затем вызываем этот сниппет навроде
{set $resources = '!getSlaves' | snippet : ['where' => 'msProductMaster.id IN (1,2,3,4,5,6) AND msProductDataSlave.price <= 2000']}
где для указания каких-либо параметров мастера\раба используем msProductMaster.PARAMNAME\msProductSlave.PARAMNAME соответственно, а для фильтра по их характеристикам msProductDataMaster.PARAMNAME\msProductDataSlave.PARAMNAME — и уже переменную $resources прописываем куда нужно — в pdoPage или pdoResources или еще куда в параметр resources
Вызываете pdoMenu как и обычно, только в чанке с шаблоном оформления ссылки проверяете
{if $_modx->resource.id == $modx->config['site_start']}
    <div class="header-menu__item header-logo">
        <a href="{$_pls['link']}"><img src="/assets/img/icons/logo-black.png" alt=""></a>
    </div>
{else}
    <div class="header-menu__item"><a href="{$_pls['link']}" class="header-menu__link">{$_pls['pagetitle']}</a></div>
{/if}
1) Вывод ошибки должен быть таким образом:
$modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
Т.к. выводить вам нужно не ошибку плагина, а ошибку именно сервиса отправки почты

2) После этого можно прочитать что MAIL_SENDER указан неверно — должен быть адрес почты.
$modx->mail->set(modMail::MAIL_SENDER, $modx->config['emailsender']);
3) Чтобы получить адрес отправителя из системных настроек нужно писать:
$modx->config['emailsender']
а никак не просто 'emailsender'
А вы уверены что URL генерируются корректные? Может у вас ссылки на стили прописываются некорректные в итоге выдается ошибка 404 при их загрузке, а в качестве 404 страницы по умолчанию указан ресурс с айди 1, в итоге грузится он, а на нем ссылки на несуществующие… и так далее. В общем, проверьте ссылки или попробуйте создать пустую страницу и в системных настройках для 404 и 403 ошибки укажите пустую страницу
Использовать Ion.RangeSlider, например. Пример можете посмотреть Здесь. Единственно необходимо будет поправить момент что этот слайдер посылает тригер change при движении постоянно, в итоге каталог будет обновляться over500 раз (фильтры отлавливают событие change). Правил тем что в самом коде слайдера изменял отправку события change только когда «отпустили» ползунок.
Причем
$tickets = $modx->getService('tickets', 'Tickets', $modx->getOption('tickets.core_path', null, $modx->getOption('core_path') . 'components/tickets/') . 'model/tickets/', array());

    $thread = $modx->newObject('TicketThread', array(
        'name' => 'resource-'.$resource_id.'-customer',
        'resource' => $resource_id,
        'createdon' => date("Y-m-d H:i:s"),
        'subscribers' => array(1, $user_id),
        'createdby' => $user_id
    ));
    $thread->save();
Создает ветку комментариев без проблем.
А вот
$tickets = $modx->getService('tickets');

    $thread = $modx->newObject('TicketThread', array(
        'name' => 'resource-'.$resource_id.'-customer',
        'resource' => $resource_id,
        'createdon' => date("Y-m-d H:i:s"),
        'subscribers' => array(1, $user_id),
        'createdby' => $user_id
    ));
    $thread->save();
Выдаст ошибку. Хотя в плагине Tickets используется как раз
$tickets = $modx->getService('tickets');