首页 > 解决方案 > 尝试将 HTML 转换为 Ajax 的问题

问题描述

我在用于我的网站的视频脚本(视频页面布局)中得到了这个:

<div class="video-views pull-left">
    {$videos[i].viewnumber|kilo} {if $videos[i].viewnumber == '1'}{t c='global.view'}{else}{t c='global.views'}{/if}
</div>

相关视频部分使用 Ajax 进行通过“显示更多”按钮生成的视频页面布局。

我的问题是:我不知道如何在 Ajax {$videos[i].viewnumber|kilo} 中转换“kilo”函数。我尝试了几件事,但没有结果。

$code[]     = '<div class="video-views pull-left">';
$views      = ($video['viewnumber'] == '1') ? $lang['global.view'] : $lang['global.views'];
$code[]     = $video['viewnumber']. ' '.$views;
$code[]     = '</div>';

标签: htmlajaxsmarty

解决方案


Kilo 不是 Smarty 发行版中包含的修饰符,但如果您可以访问您网站上的代码,您可以从插件文件中提取代码,它很可能是smarty/libs/plugins/modifier.kilo.php.

看起来您正在使用 PHP 来构建对 AJAX 请求的响应,因此您可以将该代码拉出并重新使用它。

如果您无权访问修改器文件,则可以自己重新创建格式。从上下文来看,这很简单,例如:

<?php
/**
 * Format integers into human readable strings indicating number of thousands
 * Example: 1200 -> 1.2K
 * @param int $value
 * @return string
 */
function kilo(int $value): string
{
    // If the value is less than 1000, just return it
    if($value < 1000)
    {
        return $value;
    }

    /*
     * If the value is evenly divisible by 1000, we want to show a whole number,
     * otherwise format it as a single precision float. Add "K" string literal
     * to indicate thousands
     */
    $formatString = ($value % 1000) ? '%.1fK':'%dK';

    // Divide value by 1000
    $value /= 1000;

    // Return the formatted string
    return sprintf($formatString, $value);
}

// Define some test data and echo the formatted values
$testViewCounts = [1, 123, 1230, 12300, 123000];
foreach($testViewCounts as $views)
{
    // If only one view, do not pluralize
    $label = ($views == 1) ? 'view':'views';
    echo kilo($views).' '.$label.PHP_EOL;
}

推荐阅读