PHP Супер простой супер легкий шаблонный движок для создания меню

Я пытаюсь сделать супер легкий шаблонный движок, который почти ничего не может сделать.
Почему другой шаблонизатор? Потому что у нас так много, что можно сделать или просто НИЧЕГО или слишком много ..

Чего я не хочу делать, так это использовать все заданные переменные и компилировать код 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'        =>      ']'
);

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]