Я пытаюсь сделать супер легкий шаблонный движок, который почти ничего не может сделать.
Почему другой шаблонизатор? Потому что у нас так много, что можно сделать или просто НИЧЕГО или слишком много ..
Чего я не хочу делать, так это использовать все заданные переменные и компилировать код PHP.
Чего я не хочу делать, так это создания простого скрипта, который выполняет только str_replace и period …
Однако я также не хочу, чтобы в моем шаблоне был какой-либо PHP-код или аналог.
Я хочу загрузить массив и использовать его для создания многослойного меню.
Например, я получил следующий код:
{menu}
<ul>
{item}<li>
<a href="[@url]">[@link]</a>
{submenu}
<u>
{item_active}<li><a href="[@url]"><strong>[@link]</strong></a></li>{/item_active}
{item}<li><a href="[@url]">[@link]</a></li>{/item}
</ul>
{/submenu}
</li>
{/item}
{itemactive}<li>
<a href="[@url]"><strong>[@link]</strong></a>
{submenu}
<u>
{item_active}<li><a href="[@url]"><strong>[@link]</strong></a></li>{/item_active}
{item}<li><a href="[@url]">[@link]</a></li>{/item}
</ul>
{/submenu}
</li>{/itemactive}}
</ul>
{/menu}
Я хочу извлечь данные и объединить их в массив, чтобы я мог использовать их в меню.
После того, как этот код был загружен, я хотел использовать его, вызывая его в моем шаблонизаторе примерно так:
$tpl->block(
'menu',
array(
array(
'name' => 'item',
'url' => 'www.bing.com',
'link' => 'Bing search',
),
array(
'name' => 'itemactive',
'url' => 'maps.bing.com',
'link' => 'Bing maps',
),
array(
'name' => 'item',
'url' => 'www.google.com',
'link' => 'Google search',
),
array(
'name' => 'item',
'url' => 'maps.google.com',
'link' => 'Bing maps',
)
)
);
Но я буквально застрял, строя его.
У меня абсолютно 0 Понять, как продвигаться … Я продолжаю переписывать код и изгибать идею. Но я просто не могу выработать логику, чтобы заставить это работать.
Кто-нибудь делал что-то подобное раньше? И кто-нибудь знает, какую логику я должен использовать, чтобы заставить это работать?
Это не должно быть основано на моей идее здесь. Пока это работает, я действительно счастлив !!
Заранее спасибо!!
Я уже создал следующий код для извлечения HTML
///########-------------------------------------------------------------
///########-------------------------------------------------------------
///######## FUNCTION TO FILTER A TEMPLATE FOR ARRAY BLOCKS
///########-------------------------------------------------------------
///########-------------------------------------------------------------
private function GetMultipleBlocks($var, $FileString) {
///########==================================================
///######## COMPILE THE SEARCH PATTERN
///########==================================================
$StartElement = $this->Seperators['grpstart'].$var.$this->Seperators['grpend'];
$EndElement = $this->Seperators['grpstart'].'\/'.$var.$this->Seperators['grpend'];
///######## CREATE THE SEARCHPATTERN
$SearchPattern = '/\\'.$StartElement.'.*?'.$EndElement.'/s';
///########==================================================///########==================================================
///######## SEARCH FOR THE TEMPLATE OBJECT
///########==================================================
preg_match_all($SearchPattern, $FileString, $SearchResult, PREG_SET_ORDER);
///########==================================================///########==================================================
///######## IF THE FIRST PART SUBSECTION HAS BEEN SET
///########==================================================
if(isset($SearchResult[0][0]) === true){
///######## SET THE HTML BLOCK
$HTMLBlock = $SearchResult[0][0];
///########==================================================
///######## RESET THE START AND END ELEMENT
///########==================================================
$StartElement = $this->Seperators['grpstart'].$var.$this->Seperators['grpend'];
$EndElement = $this->Seperators['grpstart'].'/'.$var.$this->Seperators['grpend'];
///########==================================================///########==================================================
///######## CLEANING THE TEMPLATE
///########==================================================
$FileString = str_replace($HTMLBlock, NULL, $FileString);
///######## CLEAN THE TEMPLATE BLOCK
$HTMLBlock = str_replace(array($StartElement, $EndElement), NULL, $HTMLBlock);
///########==================================================///########==================================================
///######## RETURNING THE PLACEHOLDER CONTENTS
///########==================================================
return($HTMLBlock);
///########==================================================
}
///########==================================================///########==================================================
///######## IF THE SUBSECTION HAS NOT BEEN SET
///########==================================================
else{
///########==================================================
///######## RETURN FALSE
///########==================================================
return(false);
///########==================================================
}
///########==================================================
}
Разделители в классе определены:
/// **** SEPERATORS
public $Seperators = array(
'grpstart' => '{',
'grpend' => '}',
'plcstart' => '[@',
'plcend' => ']'
);
Задача ещё не решена.
Других решений пока нет …