Мастер Сниппет для управления другими Динамическими Сниппетами

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

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

Таким образом, я думал о том, чтобы создать отдельные фрагменты, которые будут использовать только отдельные поля.

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

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

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

2 ответа

Решение

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

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

В 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);
Другие вопросы по тегам