Станислав

Станислав

С нами с 11 января 2013; Место в рейтинге пользователей: #1227

Просмотры страниц на Tickets в виджете админки

Попросили меня в предыдущей статье привести свой вариант виджета используя просмотры Tickets, но не вписался в комментарий и написал отдельный топик.



Подумал, что лучше всё-таки использовать pdoResources, чтобы выводило не только тикеты, а любую страницу сайта.

Вот моё готовое решение (нужны установленные pdoTools, Tickets):
Василий Столейков
02 февраля 2017, 10:00
modx.pro
32
6 018
+15

Вывод заказов пользователя и товаров заказа

Нужна была возможность вывода заказов клиента и товаров в этих заказах. Велосипедов много, мой один из них.

1) Снипет для вывода заказов:
<?php
// снипет выводит заказы текущего пользователя

$user_id = $modx->user->get('id');
$tpl = $modx->getOption('tpl',$scriptProperties,'tpl.order');

// подхватываем заказы текущего пользователя
$q = $modx->newQuery('msOrder', array('user_id' => $user_id));
$results = $modx->getCollection('msOrder', $q);

// выводим или чанками или предупреждением что заказов пока нет
foreach ($results as $result) {
  if ( $result ) {
    $resultArray = $result->toArray();
    $output .= $modx->getChunk($tpl,$resultArray);
  } else {
    $output = 'У вас пока еще нет заказов.';
  }
}
return $output;
и соответственно чанк tpl.order (на феноме):
<div>
  <div> Заказ <span>{$_pls['num']}</span> от <span>{$_pls['createdon']}</span> года</div>
  <div>
    {$_modx->runSnippet('!msOrdersProducts', ['order'=>$_pls['id']])}
  </div>
</div>

2) Снипет вывода товаров заказа:
<?php
// выводит товары заказа.
$tpl = $modx->getOption('tpl',$scriptProperties,'tpl.order_cell'); // если товар найден
$tpl_empty = $modx->getOption('tpl',$scriptProperties,'tpl.order_cell_empty'); // если товар не найден

// ищем товар по id заказа
$q = $modx->prepare("SELECT * FROM ".$modx->getOption('table_prefix')."ms2_order_products WHERE order_id=".$order);
$q->execute();
$results = $q->fetchAll(PDO::FETCH_ASSOC);

$output;
// перебором либо выводим нужный заказ, либо оповещаем что его уже нет
foreach ($results as $result) {
  $res = $modx->getObject('modResource', array('pagetitle'=>$result[name]));
  
  if ($res) {
    $resArray = $res->toArray();
    $output .= $modx->getChunk($tpl,$resArray);
  } else {
    $prodName = $modx->setPlaceholder('name', $result[name]);
    $output .= $modx->getChunk($tpl_empty);
  }
}
return $output;
и соответственно чанк tpl.order_cell (на феноме):
<div>
  <span><a href="{$id | url}">{$pagetitle}</a></span>
  <span>{$price} Р</span>
</div>
и чанк в том случае если товара уже нет tpl.order_cell_empty:
<div>
  <span>{$_pls['name']}</span>
  <span>не найден</span>
</div>

Писал потому как, во первых учусь писать, во вторых быстрее написать чем искать подходящее решение и допиливать его. Буду рад советам и исправлениям. Пригодились бы советы по поводу:
1) сырого SQL:
$q = $modx->prepare("SELECT * FROM ".$modx->getOption('table_prefix')."ms2_order_products WHERE order_id=".$order);
$q->execute();
$results = $q->fetchAll(PDO::FETCH_ASSOC);
2) Первоначально хотел все в первом снипете вывести вот тут (далее в коде), но не получилось. Если кто подскажет буду рад.
// выводим или чанками или предупреждением что заказов пока нет
foreach ($results as $result) {

  // думал тут подхватить товары, но что с ними дальше так и не придумал...

  if ( $result ) {
    $resultArray = $result->toArray();
    $output .= $modx->getChunk($tpl,$resultArray);
  } else {
    $output = 'У вас пока еще нет заказов.';
  }
}
Всем успехов.
Юрий Фомин
27 января 2017, 15:51
modx.pro
15
4 121
+2

Можно ли взломать сайт на MODX?

Добрый день!
Такая проблема случилась:
Выгрузил сайт клиенту на хостинг, а он включил заднюю, нанял какого-то сисадмина, чтобы помог ему сменить все доступы и не хочет платить.
Как бы напрашивается вопрос: Есть ли такая возможность взломать MODX, чтобы справедливость восторжествовала? Возможно за $
Артем
23 января 2017, 20:04
modx.pro
23
8 494
+1

modNodejs - Интеграция Nodejs в MODx

Всем доброе утро. Сегодня представляю на всеобщее обозрение компонент над которым я потел последние несколько дней.

Заголовок говорит сам за себя, это интеграция Nodejs в MODx.
Так зачем он нужен? Для realtime! Как сказал Николай: «технологии диктуют».

Простейший пример: в minishop2 поступил заказ, а менеджер гуляет по админке\сайту, вот что он увидит:

Без перезагрузки страницы и тд, можно выполнить любой js по наступлению эвента.
but1head
21 января 2017, 03:11
modx.pro
22
13 485
+27

[xParser] 1.2.0 - Парсер HTML контента + совмещение заданий

Парсер HTML контента востребованная штука, поэтому естественным шагом было его внедрение в xParser.

А с версии 1.2.0 компонент позволяет совмещать задания. Например, вам нужно распарсить RSS ленту и каждую запись выпилить с сайта полностью. Для этого:
  1. Создаётся пара заданий (первое — RSS, второе — HTML),
  2. Настраивается,
  3. Запускается.
Павел Гвоздь
15 января 2017, 01:18
modx.pro
9
9 851
+17

Собственные модификаторы Fenom

Продолжаю разработку новой версии modstore.pro и хочу поделиться простым способом подключения своих модификаторов.

Обычный способ все знают: нужно создать сниппет, который будет принимать переменные $input и $options и вызвать его в чанке вот так:
{$variable | snippet}
Но
  • Сниппеты бывают совсем небольшие и создавать их на каждый чих не хочется
  • Вызов сниппета, это всё-таки дополнительная нагрузка
  • Лично я уже полностью перешел на файлы, и создавать запись в БД для сниппета, только ради его связи с файлом мне совсем не хочется
То есть, я хочу просто вызывать некий код в качестве модификатора. И в этом мне поможет событие pdoToolsOnFenomInit, которое появилось в pdoTools 2.6.0 и мало кто это заметил.
Василий Наумкин
14 января 2017, 05:49
modx.pro
29
9 936
+14

Функции хелперы для MODX

Друзья, поздравляю всех с наступающим Новым годом! Надеюсь, в новом году мы преодолеем все трудности и нам всем улыбнётся удача!


Ещё я хочу представить новую разработку в сфере улучшения процесса разработки — функции для работы с MODX.
Сергей Шлоков
31 декабря 2016, 08:57
modx.pro
23
6 120
+25

Создаём ZIP архив средствами MODX

Случается так, что на сайте надо запаковать какую-то папку, а по некоторым причинам сделать это невозможно затруднительно. Предлагаю вариант, который практически не требует ничего, кроме MODX и доступа в бек-энд.

В xPDO есть класс xPDOZip, который умеет запаковывать/распаковывать архивы. К сожалению, в самом MODX его функциональность задействована ровно наполовину — распаковать ZIP архив мы можем, а вот запаковать папку в архив не имеем возможности. Предлагаю решение!
Павел Гвоздь
13 декабря 2016, 01:00
modx.pro
17
6 921
+13

Критическая уязвимость в MODX Revolution

Сильно в детали лезть не буду, просто скажу, что сейчас любой MODX Revo сайт потенциально уязвим. Дыра позволяет выполнить SQL-инъекции, в том числе с созданием на сайте привилегированных пользователей.
Базовые методы противодействия: подмена дефолтных системных папок (особенно connectors) и, главное — смена префикса таблиц. Так как далеко не все это делают, то можно сказать, большинство сайтов в зоне опасности. Кто хочет ощутить это на себе, может в комментах написать ссылку на сайт.

Если кто на уже рабочем сайте хочет префиксы сменить, я описывал метод здесь.

P.S. И еще заповедь: не пускайте никого в админку, даже с самыми минимальными правами. Это практически 100% гарантия взлома при желании.
Fi1osof
05 ноября 2016, 07:50
modx.pro
18
42 404
+30

Загрузка заказов ms2, Tikets на стартовой странице

При сравнении «специализированных» cms для интернет магазинов и minishop заметил общую тенденцию у первых выводить при входе в админку список заказов. После недолгой переписки с замечательным исполнителем Павлом Гвоздем возникло такое замечательное и гениальное по простоте решение:
заходим в настройки системы, далее в фильтре по ключу отыскиваем 2 значения:
1. welcome_action меняем с welcome на mgr/orders
2. welcome_namespace с core на minishop2
и вуаля на чистом клиенте отображается список заказов, очень удобно
Здоров Александр
11 октября 2016, 20:28
modx.pro
66
6 730
+27