2012-07-19 192 views
0

我正在使用sprintf这个我很新的主题。我无法从开发者那里得到这方面的定制支持,所以我试图自己弄清楚。sprintf php - 它是如何工作的?

不理解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标题点击,但它只是去了。主题文件夹的根目录,而不是标题的页面。

任何帮助理解这一点,使其工作将不胜感激。

+1

...你没读[sprintf的] PHP手册(http://nl3.php.net/manual/en/function.sprintf。 PHP)? – RobIII 2012-07-19 17:23:47

+0

@罗伯尔:我做到了。我知道它是如何工作的概念,但没有足够的知识去完成我所需要的工作。 – 2012-07-19 17:25:06

+0

那么,如果你明白了,你能向我解释为什么你在href属性中写了'%1 $ s'?不应该是'%s'?再说一次:你确定你有这个概念吗?你不错过一个参数,指定进入href的实际url吗?为什么不在单独的.php文件中对函数进行一点实验? – RobIII 2012-07-19 17:27:46

回答

3

Sprintf BASIX

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>是nummer的地方。

$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。我认为这不是你想链接到的网址?你想链接到$link的uri。刚刚发生,在参数和引用它:

sprintf(
    '...'. 
    '<h1><a href="%s">%s</a></h1><p>%s</p>', 
    Website::get('template_uri'), $icon, $link, $title, $text 
); 
+0

不,我知道我做错了。我试图做的是链接到页面。感谢您的输入Wouter J. – 2012-07-19 17:36:39

+0

这样做,非常感谢!我最初做的是从另一个网站复制我认为可能会有效并正在尝试的内容。你告诉我的是我需要添加参数,并简单地将它引用到我希望它工作的地方。令人敬畏的工作Wouter。你救了我这么头疼。我已经周而复始了几个星期,并决定今天试着想出来:) – 2012-07-19 17:43:54