Назначение строк MySQL Smarty - PullRequest
1 голос
/ 07 марта 2011

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

Я хотел бы сделать этот тип форматирования на стороне PHP, а не в шаблоне, но я не уверен, как назначить данные из MySQL для Smarty, а затем выполнить итерацию по ним. Вот PHP, который я использовал для назначения строк из 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.

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

Ответы [ 2 ]

1 голос
/ 07 марта 2011

Зацикливайтесь на массиве записей и вызывайте 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 голосов
/ 07 марта 2011

С Smarty 3 вы также можете создать фильтр переменных для автоматической обработки экранирования переменных Smarty. Смотрите этот пост:

http://www.smarty.net/forums/viewtopic.php?t=18926

...