Основной сниппет для управления другими динамическими сниппетами

Я работаю над проектом, который позволяет массово импортировать данные на веб-сайт ModX.

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

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

Тем не менее, я знаю, что это было бы полной нагрузкой на систему, которая должна запрашивать таблицу бесчисленное количество раз, поскольку потенциально существуют сотни полей.

Как я могу создать «главный фрагмент», который будет извлекать все поля, но при этом я могу разрешить их использование в качестве фрагментов?

Например... одно нажатие, чтобы получить Rec1Field1, Rec1Field2, Rec1Field3, Rec1Field4, но иметь возможность использовать их в ресурсе контента, таком как [[Rec1Field1]], [[Rec1Field2]], [[Rec1Field3]], [[Rec1Field4]]


person Kevin    schedule 28.08.2013    source источник


Ответы (2)


Другой альтернативой является использование $modx->setPlaceholders(array('placeholder'=>'value', ...)); в вашем фрагменте, который будет генерировать заполнители, доступные в любом месте вашего шаблона или вложенных фрагментов с помощью простого [[+placeholder]]. Это позволит пользователю разместить тег в форматированном тексте содержимого или там, где он может этого захотеть, без необходимости выполнять синтаксический анализ строк или возиться со сложными фрагментами.

person Kristian Sandström    schedule 30.08.2013
comment
Как бы я это сделал? Вызовите фрагмент на странице, а затем поместите мой заполнитель? Я пытаюсь сделать это так, но заполнитель ничего не представляет - person Kevin; 05.09.2013

Вы можете сделать другой подход к этому.

В Modx у вас есть функция $modx->getChunk, которая позволяет вам взять фрагмент с заполнителями и предоставить массив с ключами, соответствующими заполнителям. Затем эти заполнители будут заменены значением ключей.

Это явно не то, что вам нужно, но уже существует рабочий пример того, как использовать строку с разбором заполнителей.

см. это руководство

Итак, что вы делаете, это:

  1. Позвольте вашим клиентам размещать заполнители в поле контента там, где они хотят.
  2. В шаблоне, в котором вы хотите отобразить контент, вызовите пользовательский фрагмент, например:

    [[parse_content_with_placeholders? &content=`[[*content]]` ]]

В этом фрагменте вы делаете что-то вроде:

// Properties
$props = array('Rec1Field1' => 'Foo','Rec1Field2' => 'Bar');

// Create the temporary chunk
$uniqid = uniqid();
$chunk = $modx->newObject('modChunk', array('name' => "{tmp}-{$uniqid}"));
$chunk->setCacheable(false);

$output = $chunk->process($props, $content);
person OptimusCrime    schedule 28.08.2013
comment
Я думаю, что я запутался... не могли бы вы рассказать об этом немного подробнее? - person Kevin; 29.08.2013
comment
@o7thWebDesign - Какая часть непонятна? - person OptimusCrime; 29.08.2013
comment
Просто длинная неделя уже, я просмотрел это свежее сегодня утром, и это кажется правдоподобным. Мне придется возиться, когда придет время... спасибо - person Kevin; 29.08.2013