Павел Романов

Павел Романов

С нами с 03 марта 2014; Место в рейтинге пользователей: #70
Павел Романов
06 сентября 2020, 18:13
+1
А так?
$sortdir == 'ASC' ? $order = SORT_ASC : $order = SORT_DESC;
array_multisort($sort_array, $order, $arry_all);
Павел Романов
06 сентября 2020, 16:48
+1
Ну вот как пример:
<?php
$array = array(
    'item1' => array('name' => 'Борис', 'lastname' => 'Гришин', 'age' => 1980),
    'item2' => array('name' => 'Василий', 'lastname' => 'Васильев', 'age' => 1982),
    'item3' => array('name' => 'Геогрий', 'lastname' => 'Демидов', 'age' => 1981),
    'item4' => array('name' => 'Дмитрий', 'lastname' => 'Александров', 'age' => 1983),
    'item5' => array('name' => 'Алексей', 'lastname' => 'Белов', 'age' => 1984),
);

$totalVar=$modx->getOption('totalVar', $scriptProperties, 'total');
$modx->setPlaceholder($totalVar, count($array));
$limit = $modx->getOption('limit', $scriptProperties, 10);
$offset = $modx->getOption('offset', $scriptProperties, 0);

function sorter($key) {
    return function ($a, $b) use ($key) {
        return strnatcmp($a[$key], $b[$key]);
    };
}

usort($array, sorter($sortby)); // сортировка
$sortdir == 'DESC' ? krsort($array) :  ksort($array); // направление
$array = array_slice($array, $offset, $limit); //обрезаем, сдвигаем
foreach($array as $item){
    $out .= $item['name'].' '.$item['lastname'].' '.$item['age'].'<br />'; // выводим
}
return $out;
Вызов:
[[!pdoPage?
&element=`SnippetName`
&sortby=`lastname`
&sortdir=`ASC`
&limit=`3`
]]
[[!+page.nav]]
Павел Романов
06 сентября 2020, 14:01
+1
У Вас в сниппете youtubeTest что именно перебирается? Если это объект, о котором MODX знает, то используйте просто getCollection. Там можно сразу все задать:
//...
$items= $modx->getCollection('Ваш_объект', array(
    'limit'=>$limit, 
    'offset' => $offset, 
    'sortby'=> $sortby,
    'sortdir'=> $sortdir,
));
foreach($items as $item){
    $output .= $modx->getChunk($tpl, array());
}
//....
Павел Романов
05 сентября 2020, 11:16
+1
А как в сниппете youtubeTest (результат работы которого Вы пытаетесь разбить на страницы) обрабатываются переменные sort и limit, которые Вы ему передаете?
pdoPage — это просто обертка. Сниппет, для вызова которого он используется, должен сам лимитировать вывод на основе входных параметров и иметь возможность сдвига (offset) для реализации пагинации.
Павел Романов
01 сентября 2020, 14:13
0
Переменная $profile должна быть объектом.
Недавно же обсуждали.
Павел Романов
31 августа 2020, 11:25
0
При клике по кнопке посредством JS подставляйте в поле recipient ID юзера.
Павел Романов
30 августа 2020, 15:34
+1
Это поле extended с массивом значений.
Можно вывести, например, таким сниппетом:
<?php
if($profile = $modx->user->getOne('Profile')) $out = $profile->get('extended')[$field];
return $out;

Ну и вызов:
[[!SnippetName? &field=`usertype`]]
Павел Романов
24 августа 2020, 11:55
0
Э…
[[*id:is=`2`:then=`Текст`]]
Павел Романов
17 августа 2020, 20:17
+1
Поправочка:
...
    $cats[] = $resource['category_id']; // тут category_id, а не id
...
Павел Романов
17 августа 2020, 19:57
+1
Этот сниппет собирает все категории товара, которые у него отмечены на соответствующей вкладке.
Если нужно выводить их по родителям, то можете в нем собирать только ID-шники категорий:
<?php
$modx->getService('miniShop2');
$docid = $modx->getOption('docid', $scriptProperties, $modx->resource->get('id'));
$sql = "SELECT * FROM {$modx->getTableName('msCategoryMember')} WHERE `product_id` = $docid";
$q = $modx->prepare($sql);
$q->execute();
$resources = $q->fetchAll(PDO::FETCH_ASSOC);
foreach ($resources as $resource){
    $cats[] = $resource['id'];
}
$out = implode(',', $cats);
return $out;

И его вызов подставлять уже в pdoResources:
[[pdoResources?
&parents=`123` // нужный родитель
&resources=`[[getCategories:default=`9999999`]]`
&tpl=`cat_tpl`
.........
]]
Павел Романов
17 августа 2020, 14:33
+1
Сделайте сниппет getCategories:
<?php
$modx->getService('miniShop2');
$docid = $modx->getOption('docid', $scriptProperties, $modx->resource->get('id'));
$sql = "SELECT * FROM {$modx->getTableName('msCategoryMember')} WHERE `product_id` = $docid";
$q = $modx->prepare($sql);
$q->execute();
$resources = $q->fetchAll(PDO::FETCH_ASSOC);
foreach ($resources as $resource){
    $cat = $modx->getObject('modResource', $resource['category_id'])->toArray(); 
    $out .= $modx->getChunk($tpl,$cat);
}
return $out;

Вызывайте на странице товара
[[getCategories? 
&tpl=`cat_tpl`
]]

В чанках:
[[getCategories? 
&tpl=`cat_tpl` 
&docid=`[[+id]]`
]]

В чанке cat_tpl доступны все поля ресурса например:
<a href="[[+uri]]">[[+pagetitle]]</a>
Павел Романов
14 августа 2020, 17:10
0
Чтобы в чанках учитывались типы вывода TV-шек, нужно в вызов mFilter2 добавить:
&processTVs=`имена_tv-шек_через_запятую`
Павел Романов
15 июля 2020, 10:13
0
Сделайте сниппет getProdField:
<?php
if(!$id) $id = $modx->resource->get('id');
if(!$pr = $modx->getObject('msProduct', $id)) return;
return $pr->get($field);

И используйте:
Цена: [[getProdField? &id=`[[+id]]` &field=`price`]]
Старая цена: [[getProdField? &id=`[[+id]]` &field=`old_price`]]
Картинка: [[getProdField? &id=`[[+id]]` &field=`image`]]
Превью: [[getProdField? &id=`[[+id]]` &field=`thumb`]]
и т. д.
Доступны все поля из таблицы modx_ms2_products:
article, price, old_price, weight, image, thumb, vendor, made_in, new, popular, favorite, tags, color, size, source
Павел Романов
14 июля 2020, 20:04
0
Лучше так (там не включен Fenom на страницах ))):
<base href="[[++site_url]]" />
Павел Романов
13 июля 2020, 11:09
+2
Сделайте сниппет:
<?php
$tv = $modx->resource->getTVValue('tvname'); // имя Вашей TV с типом вывода "разделитель" и запятой в качестве оного. 
$arr = explode(',',$tv);
$count = count($arr);
if($tv == '') $count = 0;
$scriptProperties['limit'] = 10 - $count;
$scriptProperties['returnIds'] = 1;
$scriptProperties['resources'] = '-'.implode(',-',$arr);
return $tv.','.$modx->runSnippet('pdoResources', $scriptProperties);

Используйте его в качестве &resources в вызове (с указанием parents, sortby и templates, если нужно):
[[pdoResources?
&resources=`[[snippet? &parents=`12` &templates=`5` &sortby=`{ "menuindex":"ASC" }`]]`
&sortby=`ids` //чтобы сортировались в соответствии с $resources
// .....
]]
Павел Романов
07 июля 2020, 14:44
0
А в консоли браузера есть ошибки какие-то?
Павел Романов
07 июля 2020, 13:00
0
К шаблонам и ресурсам ее прицеплять не нужно.
Покажите, что в «Возможных значениях».
Павел Романов
06 июля 2020, 09:05
+1
Сделайте TV типа «Список (одиночный выбор)», в котором в поле «Возможные значения» получайте нужные ресурсы через @EVAL.
Можно прямым запросом в базу, или (если хочется сортировки, настройки вывода, фильтрации) через сниппет, например:

@EVAL return '---==||'.$modx->runSnippet('pdoResources',array(
'parents' => 13,
'templates' => 10,
'limit' => 0,
'sortby'=>'{  "parent":"ASC", "pagetitle":"ASC"  }',
'tpl'=>'@INLINE [[#[[+parent]].pagetitle]] » [[+pagetitle]] ([[+id]])==[[+id]]',
'showUnpublished' => 1,
'outputSeparator'=>'||'
));

И уже эту TV укажите в качестве источника MIGX:

[
  {
    "caption": "Заголовок",
    "fields": [
      {
        "field": "document",
        "caption": "Статья",
        "inputTV":"tvname"
      }
    ]
  }
]
Павел Романов
10 июня 2020, 16:44
0
В TV category в возможных значениях нужно сделать так, чтобы у ресурса прописывался не голый ID категории, а с оберткой.
К примеру:
-44-

Тогда Вы можете делать выборку так:
'tvFilters' => ('category==%-' ~ $_modx->resource.id~'-%')