При помощи этого тега в шаблоне создается новый контекст, куда можно передавать данные и из которого можно забирать данные. Тег <core:datasource> может использоваться чтобы создать контекст из значения какой-либо переменной, чтобы внутри контейнера сократить размер записи в выражениях (см. ниже пример).
Подробнее о контейнерах данных в WACT-шаблонах.
<core:datasource> - это WactRuntimeDatasourceComponentTag с активным компонентом класса WactDatasourceRuntimeComponent.
<core:datasource id='id' [from='extpression']> __some__content___ </core:datasource>
В любом месте WACT шаблона.
Любое
Рабочие примеры см. http://projects.limb-project.com/wact/show.php?group=tags/core/datasource/
В данном примере показано использование:
Напомним, что {$somevar} - это переменная в текущем контейнере данных, {^somevar} - это переменная в родительском контейнере данных (можно использовать несколько раз {$^^somevar}, а {#somevar} - переменная глобального контейнера данных, коим является сам шаблон.
Допустим у нас такой шаблон /datasource.html:
<core:datasource id='main'> Name = {$name}<br/> <core:datasource id='secondary'> Secondary Name = {$name}<br/> Parent name = {$^name}<br/> Global name = {$#name}<br/> </core:datasource> </core:datasource>
Теперь мы проставим данные в этот шаблон:
$template = new WactTemplate('datasource.html'); $template->set('name', 'Mike'); $main = $template->getChild('main'); $main->set('name', 'Pavel'); // Можно также использовать $main->registerDatasource(array('name' => 'Pavel')); $secondary = $template->getChild('secondary'); $secondary->set('name', 'Sergey'); // Можно также использовать $template->setChildDatasource('secondary', array('name' => 'Sergey'));
В итоге получим:
Name = Pavel<br/> Secondary name = Sergey<br/> Parent name = Pavel<br/> Global name = Mike<br/>
В данном примере показано использование атрибута from для заполнения контейнера данных.
В предыдущем примере мы заполняли контейнер данных тега <core:datasource> из внешнего php-файла. Здесь мы покажем, как <core:datasource> может забирать данные самостоятельно при помощи атрибута from. Значение атрибута from в общем виде - это выражение, правда допускается использование краткой формы (без {$}, только DBE, см. ниже)
Шаблон:
<core:datasource from='{$#article.author}'> Person name: {$name}<br/> The same as above line: {$#article.author.name}<br/> </core:datasource>
php-скрипт, использующий шаблон:
$template = new WactTemplate('datasource_from.html'); $template->set('article' => array('author', array('name' => 'Ivan')));
В итоге получим:
Person name: Ivan<br/> The same as above: Ivan <br/>
В краткой форме from выгладит следующим образом:
<core:datasource from='#article.author'> Person name: {$name}<br/> The same as above line: {$#article.author.name}<br/> </core:datasource>
<core:datasource id='my_article'> <?php $title = $my_article->getTitle(); ?> {$$title} </core:datasource>
см. раздел Использование php-кода в шаблонах.