Готовые решения

Семантически правильныe Breadcrumbs на pdoCrumbs

Верстая очередной проект для замороченных на SEO клиентов, столкнулся с тем, что pdoCrumbs конечно хорош в своей программной логике, но приведенные в документации примеры не совсем верно построены с точки зрения SEO и архитектуры HTML.

Под катом сам код, мои заметки и несколько полезных комментариев.



Николай Савин
27 января 2017, 19:12
41
5 423
+20

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

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

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
11
1 188
+2

Мониторим свои сайты via modMonitor на node.js

Всем привет!

Для начала предлагаю зайти вот сюда: modmonitor.ru/
Если это не интересно, то можно дальше и не читать. А если интересно и хотите себе такое же, прошу под кат.

Fi1osof
24 января 2017, 21:16
3
2 981
+14

Копия ресурса - небольшой плагин.

Иногда возникает необходимость при копировании ресурса, присвоить дублю какие то свойства оригинала
из таблиц сторонних компонентов. Это достаточно просто сделать плагином на событие OnResourceDuplicate.
Под катом пример плагина для импорта опций пакета msOptionsColor
Володя
18 января 2017, 06:39
4
1 120
+11

cacheRegenerator. Авторегенерация кеша страниц

Сегодня публикую маленький, но очень полезный компонент (надеюсь в течение дня будет одобрен в modstore.pro). Сейчас это всего один плагин. Задача его состоит в том, чтобы сразу после сохранения документа выполнять регенерацию этой страницы, чтобы даже при первом заходе посетителя, документ уже был в кеше и отдавался быстрее.
Fi1osof
13 декабря 2016, 08:04
5
2 922
+16

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

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

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

Как починить MarkerGoogleMaps.

Ставил сейчас компонент MarkerGoogleMaps. Недавно у GoogleMaps изменились требования и теперь для работы нужен ключ API. Компонент MarkerGoogleMaps старенький и давно не обновляется и сейчас в нем не работает поиск по адресу в админке и не грузиться сама карта на фронте.
После некоторых танцев с бубном компонент удалось починить и здесь решил поделиться решением. Вдруг кому-то надо :).
Александр
09 декабря 2016, 19:01
4
1 335
+8

Для установки страниц, настроек и приложений

Простое приложение для первоначальной установки и настройки сайта.

Внимание!!! Устанавливать только на чистый MODX REVO.

Приложение может:
— создать страницы;
— установить отмеченные приложения;
— задать настройки по умолчанию (такие как емаил по умолчанию, включение ЧПУ и тд.);






Приложение бесплатное.

Приложение в магазине
Андрей Степаненко
01 декабря 2016, 13:40
5
1 757
+10

smsGate-1.0.0. Авторизация через sms



На самом деле компонент предназначен не только для авторизации через sms, а в принципе для отправки sms. Но в первую очередь он нужен был именно для настройки двухфакторной авторизации. И вот как раз в плане вклинивания в процесс авторизации я узнал много нового (хотя и так знал не мало). Был немного расстроен…
Fi1osof
30 ноября 2016, 21:35
5
3 655
+12

Новая версия готового интернет-магазина ms2Store



Приветствую!

С 23 ноября доступна новая версия сборки на MODX Revo и miniShop2. Кому интересно изучать электронную коммерцию с MODX Revo на готовом решение, прошу ознакомиться к функционалом.
Stan Ezersky
21 ноября 2016, 06:20
6
3 583
+10