2011-03-06 3 views
1

Я использую Smarty в проекте, и я нахожу, что слишком много делаю в форматировании строк в моем шаблоне Smarty, тем самым побеждая цель использования Smarty. Это особенно касается данных из MySQL, часто требующих форматирования, таких как stripslashes и replace.Назначение строк MySQL Smarty

Я хотел был бы сделать этот тип форматирования на стороне PHP, а не в Шаблоне, но я не уверен, как назначить данные из MySQL в Smarty, а затем итератировать по нему. Вот РНР, что я использую, чтобы назначить строки из MySQL в Smarty:

while ($entry = $getBlogEntries->fetch()) { 
    $entries[] = $entry; 
} 

Простой массив с каждой строкой извлекается, без форматирования. Затем присваивается:

$smarty->assign('blogEntries', $entries); 

И, наконец, итерацию над следующим образом:

{section name=entries loop=$blogEntries}<div class="blogEntry-middle-index"> 
        <a class="postTitle" href="/blog/entry/{$blogEntries[entries].id}">{$blogEntries[entries].blogTitle|stripslashes}</a> 
        {$blogEntries[entries].blogBody|stripslashes} 
       </div>{/section} 

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

Любая помощь была бы принята с благодарностью. Благодаря!

ответ

1

Прокрутите массив записей и вызовите htmlentites() над элементами, которые вы планируете передать Smarty. Храните их в новом массиве, который получит Smarty.

// Get all the entires on an array like you have done 
while ($entry = $getBlogEntries->fetch()) { 
    $entries[] = $entry; 
} 

// New array for Smarty 
$smarty_entries = array(); 

foreach ($entries as $entry) 
{ 
    // Add each element from $entries onto the array for Smarty 
    // Calling stripslashes and htmlentites on the fields Smarty will use 
    $smarty_entires[] = array(
    "id" => htmlentities(stripslashes($entry['id']),ENT_QUOTES), 
    "blogBody" => htmlentities(stripslashes($entry['blogBody']),ENT_QUOTES), 
    // Other parts of the entry 
); 
} 
$smarty->assign('blogEntries', $smarty_entries); 

// Now in your smarty template you don't need the stripslashes or escape modifiers 
+0

Технически, вам не нужно сначала создать '$ массив entries'. Вы можете просто создать массив '$ smarty_entries' прямо внутри цикла' fetch() 'вместо' $ entries', если у вас нет необходимости в вашем скрипте для нефильтрованного исходного вывода из вашего вызова 'fetch()'. –

+0

Это трюк, спасибо! Легко передавать каждую запись через функцию, чтобы сделать еще больше с ней. Я не планирую использовать Smarty много, но когда я это делаю, я хотел бы сохранить это как то, что задумал разработчик. :) – NightMICU

+0

Раньше я использовал Smarty экономно, но теперь сильно полагаюсь на него. Это довольно мощный и хорошо спроектированный IMO –

Смежные вопросы