Solutions /

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

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



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

Вот моё готовое решение (нужны установленные pdoTools, Tickets):
02 february 2017, 13:00    Василий Столейков
22    371    35 +15
Solutions /

Количество просмотров страниц+виджет - удобное СЕО

Друзья! прежде всего пишу для себя, что бы не потерять.
Итак выглядит это примерно так



Решение же конечно до боли простое, но оно стало для меня таким полезным, т.к строится все на статистике!
Для кого пригодится? Для тех кто отслеживает позиции своего сайта, если мало просмотров соответственно, либо материал не интересен, либо он далеко в поиске и материал нужно менять, либо доработать. Ну и для тех кому впринцыпе интересно где люди чаще бывают, где возможно стоит разместить рекламу.
Итак приступим.
01 february 2017, 18:17    Cay
15    466    13 +13
Solutions /

Сортировка drag'n'drop в свойствах товаров

Зачастую в некоторых проектах требуется поддержка сортировки в комбобоксах. Требуется это по разным причинам, в частности, это и хотелки заказчика, и требования сортировки в ручном режиме для каждого товара, и т.п. странные пожелания.

30 january 2017, 18:54    lexikon
8    331    1 +19
Solutions /

Автосоздание ресурсов в контекстах-дублях

Задача:
Один сайт, несколько городов, один и тот же контент у всех, но разные данные (переменные).
Поначалу думал использовать Babel, но с ним не все так просто. Поэтому пришлось писать самому при поддержке неравнодушных Максима Кузнецова и Сергея Шлокова.

Решение:
  • Плагин для переключения контекстов (от Василия Наумкина)
  • Плагин на события: OnDocFormSave, OnDocFormDelete.
  • Снипет для вывода контекстов в качестве меню
  • Чанк вывода меню контекстов
  • Снипет для подтягивания полей ресурсов-оригиналов (чтоб не дублировать в базу весь контент к примеру)
  • Js-скрипт для переключения контекстов
Итак приступим…
30 january 2017, 15:13    Юрий Фомин
11    355    21 +11
New components and versions /

[msOptionsColor] - цвет / паттерн опций продукта

[msOptionsColor]Новая версия для цвета / паттерна опций продукта Minishop2. Кардинально отличается от предыдущей, просто обновиться не получится.

В целом компонент так же работает с опциями продукта, но порядком проще. Можно задать цвет, паттерн, название. Доступны все опции продукта.



Компонент в магазине — modstore.pro/packages/other/msoptionscolor
29 january 2017, 13:22    Володя
3    328    0 +8
Solutions /

Обновление стоимости доставки в админке

Бывает иногда необходимо изменить способ доставки и стоимость доставки у ранее созданного заказа. И хотелось бы чтобы это выглядело так.

Приступим :)
27 january 2017, 23:09    lexikon
8    183    0 +4
Solutions /

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

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

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



27 january 2017, 22:12    Николай Савин
28    717    21 +20
Solutions /

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

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

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 january 2017, 18:46    Юрий Фомин
5    207    0 +2
New components and versions /

[SeeToo] 1.1.0 - Класс для исключения ресурсов

В новой версии компонента были реализованы такие возможности как:
  • булевый параметр «useRandom» в сниппете «SeeTooResources», который обеспечивает включение и выключение присоединения случайных ресурсов в результатах вывода сниппета «SeeTooResources»
  • исключение из создаваемых связей ресурсов, которые прописаны в таких системных настройках как «error_page», «site_unavailable_page», «unauthorized_page»
  • класс под названием «SeeTooExcluder», с возможностью расширения, для исключения ресурсов из создаваемых автоматически связей
  • Добавлена системная настройка «seetoo_exclude_where», которую использует класс «SeeTooExcluder» для определения правил исключения ресурсов
Подробнее под катом
26 january 2017, 09:25    Владимир Кисилица
2    348    17 +7
Solutions /

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

Всем привет!

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

25 january 2017, 00:16    Николай Ланец
3    447    28 +14