Как я могу использовать набор функций PHP в Smarty

Я действительно новичок в smarty. Я хотел бы знать, как использовать набор функций PHP в smarty. Я понимаю, что некоторые функции можно использовать сразу.

Ex: {$my_string|strip_tags}

Я использую PDO вместе со smarty. Пожалуйста, смотрите ниже код, где я получаю свои сообщения

$stmnt = $conn->prepare("SELECT post_id, post_title FROM posts ORDER BY post_id DESC");
$stmnt ->execute();
$row = $stmnt ->fetchAll();
$my_template = new Smarty;
$my_template->debugging = false;
$my_template->caching = true;
$my_template->cache_lifetime = 120;
$my_template->setTemplateDir('./templates/’');
$my_template->assign("row", $row);
$my_template->display('posts.tpl');

//in my smartyposts.tpl
{foreach $row as $r}    
//display posts here
{/foreach}

Я хочу использовать некоторые функции php для создания URL-адреса из post_title. Так что обычно то, что я делаю в php

  <?php
        foreach($row as $r){
        $post_title = $r[‘post_title’];
        $create_link = preg_replace("![^a-z0-9]+!i", "-", $post_title);
            $create_link = urlencode($create_link);
            $create_link = strtolower($create_link); 
        ?>

    <a href="posts/<?php echo $create_link;?>”><?php echo $post_title ;?></a> 
    <?php } ?>

Как можно добиться того же результата, используя smarty? Я искал везде, но не мог найти никаких ответов. Цените свое время.


person Jordyn    schedule 13.12.2016    source источник


Ответы (1)


Создайте модификатор:

test.php

<?php
require_once('path/to/libs/Smarty.class.php');

function smarty_modifier_my_link($title) {
  $link = preg_replace("![^a-z0-9]+!i", "-", $title);
  $link = urlencode($link);
  return strtolower($link);
}


$smarty = new Smarty();

$smarty->setTemplateDir(__DIR__ . '/templates/');
$smarty->setCompileDir(__DIR__ . '/templates_c/');
$smarty->setConfigDir(__DIR__ . '/configs/');
$smarty->setCacheDir(__DIR__ . '/cache/');

$smarty->registerPlugin('modifier', 'my_link', 'smarty_modifier_my_link');

$smarty->assign('posts', [
  ['post_title' => 'Some Title 1'],
  ['post_title' => 'Some Title 2'],
]);

$smarty->display('index.tpl');

templates/index.tpl

{foreach $posts as $p}
<a href="/posts/{$p.post_title|my_link}">{$p.post_title|htmlspecialchars}</a>
{/foreach}

Вывод

<a href="/posts/some-title-1">Some Title 1</a>
<a href="/posts/some-title-2">Some Title 2</a>
person Ruslan Osmanov    schedule 13.12.2016