【问题标题】:Apply Smarty modifier on block output在块输出上应用 Smarty 修改器
【发布时间】:2011-09-25 09:14:46
【问题描述】:

我正在尝试将修饰符(在我的情况下为truncate)应用于块(tr 块,即翻译块)的输出。我没有 tr 作为修饰符,因为它不方便 HTML 标记。

我真的不知道我应该使用什么样的语法,也不知道它是否被允许(考虑到我对块的使用可能有点时髦)。

类似的话,如果有意义的话:

{{tr}Really long text I want to be translated then truncated{/tr}|truncate}

【问题讨论】:

    标签: php smarty block modifier


    【解决方案1】:

    可以这样做:

    {capture assign="var"}{tr}...{/tr}{/capture}
    {$var|truncate}
    

    但我个人会创建截断块函数并执行此操作

    {truncate}{tr}...{/tr}{/truncate}
    

    【讨论】:

      【解决方案2】:

      Afaik,您无法按照自己喜欢的方式组合它们。我唯一的想法是编写你自己的截断函数和你的翻译函数:

      function do_translation($params, $content, $smarty, &$repeat) {
        if (isset($content)) {
          $options = $params["options"];
          $content = yourTranslateFunction($content);
          if ($options['truncate']) $content = yourTruncateFunction($content);
          return $content;
        }
      }
      $smarty->registerPlugin("block", "tr", "do_translation");
      

      然后你可以像这样在 Smarty 中调用它:

      {tr truncate="1"}Really long text I want to be translated then truncated{/tr}
      

      【讨论】:

        【解决方案3】:

        您希望它执行的方式不起作用,这将引发带有语法错误的 Smarty 异常。但是你可以像这样组合多个块函数:

        $smarty->registerPlugin('block', 'tr', 'do_translation', true);
        $smarty->registerPlugin('block', 'truncate', 'do_truncation', true);
        

        在你的模板文件中,这样组合:

        {truncate}{tr}Really long text I want to be translated then truncated{/tr}{/truncate}
        

        【讨论】:

          【解决方案4】:

          这适用于 Smarty 2 和 Smarty 3:

          {t}Really long text I want to be translated then truncated{/t|truncate:10}

          【讨论】:

            猜你喜欢
            • 2012-01-01
            • 1970-01-01
            • 2013-05-18
            • 1970-01-01
            • 2023-03-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-12-27
            相关资源
            最近更新 更多