Александр

Александр

С нами с 05 декабря 2018; Место в рейтинге пользователей: #705
Иван Бочкарев
25 ноября 2019, 09:05
2
0
Можно так:
{set $material = $_modx->resource.project_material | split:'||'}
{foreach $material as $item}
    {set $filter[] = 'project_material=='~$item}
{/foreach}

{'!pdoResources' | snippet : [
  'parents' => 7,
  'limit' => 2,
  'tvPrefix' => '',
  'tvFilters' => $filter,
  'showLog' => 0,
  'sortby' => 'RAND()',
  'includeTVs' => 'project_image,project_price,project_area,project_material,project_size,project_bedrooms,project_bathrooms,location',
  'tpl' => '@FILE chunks/projects/project.tpl',
]}
Сергей Шлоков
16 ноября 2019, 09:11
3
+8
Эх, молодежь. Всё делается гораздо проще. Ставим modHelpers и используем функцию snippet.
{snippet("mySnippet", ["param" => "value"], 604800)}  // сохраняем на неделю. Третий параметр лучше указать через массив (см. ниже)

А в cron удаляем кэш и парсим страницу сниппетом
... // инициализация MODX
// Лучше указать отдельную папку для хранения данных. Иначе данные будут лежать в папке cache/default, которая очищается при сохранении любого объекта MODX.
$options = array(
  cache_key => 'mysnippet_cache',
  cache_expires => 604800,
);
cache()->delete("mySnippet", $options);
snippet("mySnippet", ["param" => "value"], $options);
Что важно! В данном случае сам сниппет на странице вызывается некэшированным. Поэтому кэш самой страницы обновлять не нужно. Только кэш сниппета!!! Обратите внимание, насколько код стал проще.

Функция snippet() сама проверит кэш. Если его нет, то выполнит указанный сниппет и результат сохранит в кэш. И не нужно вычислять все эти секунды. Cron каждую неделю будет обновлять кэш независимо от того, есть он или нет. Поэтому сниппет differenceBetweenDatesInSeconds не нужен. И даже вреден. Ибо делает ненужную работу для каждого запроса страницы.

П.С. И ещё совет. Не пихайте логику во вьюхи. Это бад практис! Перенесите логику в сниппет и вызывайте его на странице.
Андрей Шевяков
14 ноября 2019, 19:45
1
+1
Спасибо @Баха Волков за помощь.

Может кому пригодится:

{foreach $rows as $row}
            {set $tmp = $row.keys | split : ', '}
            {if $term in list $tmp}
                {set $result = $row.title}
                {break}
            {/if}
{/foreach}
{$result ?: 'Ни одного с...ка соответствия'}
Сергей Шлоков
26 апреля 2019, 12:50
1
+2
Буду груб. Если Вы используете MODX, то изучите хотя бы базовые понятия работы с MySql. Как может придти в голову запрос поиска по id с LIKE? Я не говорю про тот же FIND_IN_SET. Не все знают про эту функцию. Но надо же знать, что id — это первичный индекс. По нему запрос с равенством и оператором IN отрабатывает мгновенно. А с LIKE Вы заставляете MySql бежать по всем строкам и проверять вхождение. А если строк будет сотни тысяч или миллион? Вроде же не новичок…
Jury
30 ноября 2018, 17:53
2
+1
Была такая проблема при обновлении на 2.7.
На сервере, стояла локаль en_US.UTF-8 UTF-8
Прописал в настойках modx locale en_US.UTF-8 и ошибка ушла
Что бы использовать ru_RU.UTF-8
Сгенерировал две локали на сервере
root@localhost:~# cat /etc/locale.gen | grep -v '#'
en_US.UTF-8 UTF-8
ru_RU.UTF-8 UTF-8
При этом кириллическую локаль поставил основной, и все гуд.
проверить можно так
root@localhost:~# echo $LANG
Максим
09 февраля 2018, 16:47
2
+1
Все гораздо проще! Установите компонент TVsuperSelect. Создайте TV данного типа и в возможные значения укажите вызов сниппета:
@EVAL return $modx->runSnippet('pdoResorces', ['parent'=>'1','tpl'=>'@INLINE {$pagetitle} {$id}=={$id}{$idx == $count ? '||' : ''}'])
А в параметрах вывода необходимо указать тип вывода разделитель запятая. После добавления нескольких ресурсов в это TV на выходе вы будите иметь список id ресурсов разделенных запятыми!
Илья Уткин
26 октября 2017, 10:10
1
+1
{$_modx->runSnippet('mypdoPage',[
 	'tpl' => 'oneProduct.tpl'
    'element' => 'msProducts',
    'limit' => 15,
    'sortby' => $_modx->runSnippet('sortItName.php'),
...
}
Володя
21 июня 2017, 16:18
3
0
можно еще используя феном
{foreach $options as $name => $values}
    {do $values|sort}
	...
{/foreach}
настройка pdotools_fenom_php должна быть Да
Виталий Серый
28 февраля 2017, 14:03
4
+4
Самое простое через ключ массива.
{*Первые два*}
{foreach $rows as $idx => $row}
	{if $idx < 2}
		<div>{$idx} - {$row.title}</div>
	{/if}
{/foreach}

{*С пятой строки*}
{foreach $rows as $idx => $row}
	{if $idx > 4}
		<div>{$idx} - {$row.title}</div>
	{/if}
{/foreach}

{*Чересстрочная вакханалия*}
{foreach $rows as $idx => $row}
	<div{$idx is odd ? ' class="odd"' : ''>{$idx} - {$row.title} и два тикета туДаблин</div>
{/foreach}
И т.п.
Документация Fenom.
Максим Кузнецов
08 февраля 2017, 22:45
2
+2
Вы можете сделать выборку необходимых ресурсов с тв-полем через обычный pdoResources, подключив в includeTVs нужное MIGX-поле, после чего разобрать их в чанке при помощи фенома:

{set $migx_array = $migx_tv_name | fromJSON}

{foreach $migx_array as $migx_row}
	{$migx_row['название_колонки1_в_migx']}, {$migx_row['название_колонки2_в_migx']}, ...
{/foreach}