Вопросы

Подзапрос в pdoFetch

Пожалуйста, подскажите гуру MODX — есть ли возможность как-то указать подзапрос в leftjoin?

Запрос сейчас выглядит так:

{'!msProducts'|snippet:[
    'limit' => '3',
    'parents' => '3',
    'sortby' => 'publishedon',
    'sortdir' => 'ASC',
    'tpl' => '@FILE chunks/minishop2/products_row.tpl',
    'leftJoin' => '{"small":{"class":"msProductFile","alias":"small", "on": "small.product_id = msProduct.id AND small.path LIKE \'%/small/\'"}}',
    'select' => '{"small":"GROUP_CONCAT(small.url ORDER BY small.rank SEPARATOR \';\') as images"}',
    'showLog' => '1',
]}

Цель: нужно вытащить только те изображения, у которых в поле description есть уникальное значение (там хранится цвет товара). С этим кодом в $small попадают все изображения. Для этого скорей всего нужен подзапрос в leftjoin, в котором я бы сделал GROUP BY. Если подскажите другое решение, буду признателен.
Алексей Суслов
28 марта 2018, 17:47
modx.pro
1 289
0

pdoTools + Tickets + Ajax

Добрый день!

В modx я новичек, но учусь. Я пытаюсь вывести контент с помощью pdoTools + Tickets + Ajax.

<div id="pdopage">
   
    <div class="rows">
        [[!pdoPage?
          &element=`getTickets`
          &parents=`16`
          &limit=`1`
          &ajaxMode=`button`
          &nestedChunkPrefix=`tickets_`
          &ajaxTplMore=`@INLINE <button>Загрузить ещё</button>`
        ]]
    </div>
     [[!+page.nav]]
</div>
Вместо кнопки «Загрузить еще», появляется полноценная навигация как при &ajaxMode=`default`.

Мои шаги такие:
  1. Я создаю ресурс (с типом ресурса тикет)
  2. Цепляю шаблон
  3. Собственно создаю сам шаблон и вставляю код указанный выше
Изучив форум, документацию, решения я не нашел. Подскажите правильно ли я делаю? Может я упускаю какую-то важную деталь?
Илья
28 марта 2018, 16:47
modx.pro
760
0

Динамические поля у пользователя? office.

Есть дополнение office. Как в личном кабинете сделать возможность динамически добавлять данные?
Например каждый пользователь может добавлять строку, в которой есть несколько полей… этих строк может быть сколько угодно… может удалять и добавлять, делать чекбоксом активную строку.

И потом на сайте из всех пользователей выводить эти данные… чем это реализовать можно?
UDAV
28 марта 2018, 16:43
modx.pro
1 239
0

Можно ли сделать категории для категорий?

Здравствуйте!

У товаров  в minishop2 есть классная вкладка «категории», благодаря которой товар виртуально может находится в нескольких категориях, а можно ли такую вкладку вывести для категорий с товарами
чтоб категорию можно было выводить в нескольких родительских категориях?
Вася
28 марта 2018, 16:19
modx.pro
852
0

Как изменять старую цену в miniShop2 через плагин?

Всем привет. Бьюсь над этой задачей уже пару дней, так и не могу понять как по аналогии с этим модификатором цен сделать тоже самое, но для старой цены old_price, если брать в расчёт что price по аналогичному алгоритму изменяется на сайте?

case 'msOnGetProductPrice':
		// Плагин принимает:
		// $product - объект msProductData
		// $data - массив со свойствами товара, может отсутствовать
		// $price - текущая цена товара

		// Подключаем массив значений по ссылке - так удобнее
		$values = & $modx->event->returnedValues;

		// Цена может меняться несколькими плагинами сразу, поэтому проверяем:
		if (isset($values['price'])) {
			$price = $values['price'];
		}

		// Удваиваем цену:
		$values['price'] = $price * 2;
	break;
SEQUEL.ONE
28 марта 2018, 16:07
modx.pro
1
1 684
0

Идеи для веселья над должниками :-)

Всем привет! Кое-какие товарищи денег не заплатили за сайт и поэтому решил к чертям плоды своей работы у них удалить. Поскольку у меня есть аккаунт о котором они не знают, то я через него зашел в админку и в компоненте console запустил:
print '<pre>'.shell_exec('whoami').'</pre>';
Результатом было: nginx
Я не знаю, как вы, но в этот момент я улыбнулся, подумав о том, что сис. админу тоже не заплатили :-) Пробежавшись по их серваку я узнал, что помимо моего сайта, там еще хостятся несколько других. Я ввел:
shell_exec('cd ../../../../ && rm -r *');
*../../../../ — это путь к корневой папке моего сайта… Еле удержался, чтобы не добавить еще ../ и потереть им вообще все сайты.

Собственно сайта нет, но вот мысль о том, что можно было придумать что-нибудь ориганальнее меня не покидает. Может кто-нибудь что-нибудь предложить? :-)
Волков Николай
28 марта 2018, 14:01
modx.pro
2 413
-2

Хочется узнать Ваше мнение коллеги!

День добрый коллеги! Есть задача реализовать сайт по учебным курсам. Как лучше реализовать сами курсы?
Я как понимаю лучше каждый курс реализовать как товар минишопа.
Будет категория предстоящие курсы.
Каждый учебный курс может быть с разной продолжительностью(1-2-3 дня).
Также нужен будет фильтр по дате, тематике, продолжительности и еще некоторым полям.
Как лучше реализовать поле дата проведения мероприятия?
(если курс однодневный то дата 29 марта, если трехдневный то 30 марта-1 апреля например)
ну и после окончания даты проведения курс перемещался в папку архив мероприятий. (видимо будет какой то крон проверяющий дату и перемещающий ресурс в другую папку.)

Нужны мысли как лучше реализовать логику. Спасибо!
Прохор
28 марта 2018, 13:07
modx.pro
1 057
0

При авторизации выловить группу

OnBeforeWebLogin
как при авторизации пользователя выловить его группу
&groups=`Optusers`
, и если он не входит в группу Optusers, то выдавать ошибку — Доступ запрещен, обратитесь к администратору?

[[!Office?
        	        &tplLogin=`Office.auth.login`
        	        &action=`Auth`
        	        &groups=`Optusers`
                	&loginResourceId=`58`
                ]]
думал так но выдает ошибки в консоле

<?php
$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeWebLogin':
        $modx->log(modX::LOG_LEVEL_ERROR, 'Авторизовался пользователь web:'.$username.' страница: '.$_REQUEST['pageId']);
        $ID = $modx->findResource($_REQUEST['pageId'], 'web');
        if ($ID !== false) {
            $modx->log(modX::LOG_LEVEL_ERROR, 'Авторизовался пользователь web:'.$username.' по паролю: '.$password.print_r($attributes));
        }
        $ID = $modx->findResource($_REQUEST['pageId'], 'ufa');
        if ($ID !== false) {
            $modx->log(modX::LOG_LEVEL_ERROR, 'Авторизовался пользователь ufa:'.$username.' по паролю: '.$password.print_r($attributes));
        }
        break;
}
[2018-03-28 16:13:49] (ERROR @ /var/www/u0459941/data/www/cloverflower.ru/core/cache/includes/elements/modplugin/25.include.cache.php : 5) Авторизовался пользователь web:maks страница: 56
[2018-03-28 16:13:50] (ERROR @ /var/www/u0459941/data/www/cloverflower.ru/core/xpdo/xpdo.class.php : 644) Could not load class: msoptionsprice from msoptionsprice.msoptionsprice.
[2018-03-28 16:13:50] (ERROR @ /var/www/u0459941/data/www/cloverflower.ru/core/xpdo/xpdo.class.php : 1247) Problem getting service msoptionsprice.msoptionsprice, instance of class msoptionsprice.msoptionsprice, from path /var/www/u0459941/data/www/cloverflower.ru/core/components/msoptionsprice/model/
Максим
28 марта 2018, 12:33
modx.pro
899
0

Дополнительные поля из заказа на почту менеджеру

Здравствуйте. В массиве input'ов полей, которые покупатель должен заполнить для отправки заказа, добавил time

{foreach ['time'] as $field}
  	<div class="form-group input-parent">
        <div class="col-md-8 custom-input">
            <label for="firstname">{('ms2_frontend_' ~ $field) | lexicon}<span>*</span></label>
            <input type="text" id="{$field}"
                   name="{$field}" value="{$form[$field]}"
                   class="{($field in list $errors) ? ' error' : ''}">
        </div>
    </div>
{/foreach}

В чанке отправки сообщения менеджеру следующий блок с данными покупателя

{if $address.receiver}<p><strong>Ф.И.О.:</strong> {$address.receiver}</p>{/if}
{if $user.email}<p><strong>E-mail:</strong> {$user.email}</p>{/if}
{if $address.phone}<p><strong>Телефон:</strong> {$address.phone}</p>{/if}
{if $address.street}<p><strong>Адрес:</strong> {$address.street}{/if} 
{if $address.building} д. {$address.building},{/if}  
{if $address.room} кв. {$address.room}</p>{/if}
{if $address.time}<p><strong>Удобное время:</strong> {$address.time}</p>{/if}

Но время в письме не приходит. пробовал менять на user. и просто без префикса — не выходит. Как решить задачу? Спасибо за ответы!
MrKarandash
28 марта 2018, 11:51
modx.pro
909
0

Ссылки на страницы

Здравствуйте! Есть такая проблема. Было поручено, чтоб при переходе на сайт, в зависимости от HTTP_HOST в base href вставлялась соответствующая ссылка: например https:// mysite.ru или https:// 145.67.156.45. Реализовал я с помощью [(site_url)] Но так как при переходе через IP выдавал протокол не https, а http, мне пришлось убрать проверку на https и рукой вбивать его. Теперь site_url выдает так, как нужно: https:// mysite.ru или https:// 145.67.156.45. Но проблема в другом. Ссылки на страницы: [~5~], [~98~] и т.д. выдают линки для IP через http, т.е. http:// 145.67.156.45/pseudonim/page.html. А этот линк не действителен. Поэтому невозможно при нажатии на пункт меню перейти на нужные ссылки. Где я могу сменить этот статичный http на https? Эти линки никак не связаны с [(site_url)]. Прошу помогите!
Kamran
28 марта 2018, 11:48
modx.pro
608
0