2013-08-28 3 views
0

Я работаю над проектом, который позволяет массивный импорт данных на веб-сайт ModX.Мастер-фрагмент для управления другими динамическими фрагментами

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

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

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

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

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

ответ

1

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

+0

Как мне это сделать? Вызовите фрагмент на странице, а затем поместите мой заполнитель? Я пробую это так, но местозаполнитель ничего не представляет – Kevin

+0

неважно ... это работает – Kevin

2

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

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

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

See this tutorial

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

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

    [[parse_content_with_placeholders? & содержание = `[[* содержание]]`]]

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

// 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); 
+0

Я думаю, что я в замешательстве ... не можете ли вы подробнее рассказать об этом? – Kevin

+0

@ o7thWebDesign - какая часть непонятна? – OptimusCrime

+0

Как раз через долгую неделю, я сегодня утром посмотрел этот свежий, и это кажется правдоподобным. Мне нужно будет возиться, когда наступит время ... спасибо – Kevin