0

我正在使用一个使用 sprintf 的主题,我对此很陌生。我无法从开发人员那里获得自定义支持,所以我试图自己解决。

不了解 sprintf 的工作原理,我在 Google 上搜索了大量页面,试图找到我认为很简单的解决方法。

主题使用 %s 加载文本字符串,在本例中为页面标题。我只希望标题链接到页面!而已!不多,不多。我能够在下面想出一些接近的东西:

// Featured columns
case 'columns':
    $count = Website::getThemeOption('front_page/columns/count');
    $classes = array('one', 'two', 'three', 'four');
    $columns = array();
    for ($i = 0; $i < $count; $i++) {
        extract(Website::getThemeOption('front_page/columns/column/'.$i, true)->toArray());
        $text = DroneFunc::stringToHTML($text, false);
        if ($more && $link) {
            $text .= sprintf(' <a href="%s" class="more">%s</a>', $link, $more);
        }
        $columns[] = sprintf(
            '<li class="column">'.
                '<img src="%s/data/img/icons/32/%s" alt="" class="icon">'.
                '<h1><a href="%1$s">%s</a></h1><p>%s</p>'.
            '</li>',
            Website::get('template_uri'), $icon, $title, $text
        );
    }
    ?>
    <section class="columns <?php echo $classes[$count-1]; ?> clear">
        <ul>
            <?php echo implode('', $columns); ?>
        </ul>
    </section>
    <?php
    break;

现在最初,没有超链接引用......我添加了它。现在这样做是使 h1 标题可点击,但它只是转到主题文件夹的根目录,而不是标题的页面。

任何有助于理解这一点并使其发挥作用的帮助将不胜感激。

4

1 回答 1

3

Sprintf基础

Sprintf将参数添加到占位符位置的第一个参数(以 开头%)。

例如:

$name = 'Rob';
$str = sprintf('Hello, I am %s', $name); // become: Hello, I am Rob

后面%的字母是参数类型的第一个字母。一个字符串是%s,一个小数是%d。例如:

$name = 'Rob';
$age = 26;
$str = sprintf('Hello, I am %s and I am %d years old.', $name, $age);
// become: Hello, I am Rob and I am 26 years old.

Sprintf使用参数的顺序来确定将其放置在字符串中的位置。第一个占位符获取第二个参数,第二个占位符获取第三个参数,等等。
如果你想改变这个,你需要指定这个之间%和类型。您可以通过位置编号<place>$在哪里执行此操作<place>

$name = 'Rob';
$age = 26;
$str = sprintf('Hello, I am %2$s and I am %1$d years old.', $age, $name);
// become: Hello, I am Rob and I am 26 years old.

答案

你来做这件事:

'<h1><a href="%1$s">%s</a></h1><p>%s</p>'

是第%1$s一个参数,即template_uri. 我认为这不是您要链接的网址?你想链接到 uri 中的 uri $link。只需将其放在参数中并引用它:

sprintf(
    '...'.
    '<h1><a href="%s">%s</a></h1><p>%s</p>',
    Website::get('template_uri'), $icon, $link, $title, $text
);
于 2012-07-19T17:31:09.440 回答