2013-04-29 70 views
1

我有一個我在Twig中編寫的電視指南腳本,它可以正常工作 - 數據從PDO/MySQL正確顯示,但它是循環函數,具有CSS I有問題。使用foreach/PDO進行樹枝和循環函數迭代

這是我的代碼:

的index.html(段從相關部分)

<table id="show-time-results"><tbody><tr> 
{% for d in data %} 
{% i in 0..10 %} 
{% set guide = ['odd', 'even'] %} 
<td class="{{ cycle(guide, i) }}-item name"><a href="http://localhost/twigtest/">{{d.programme}}</a><br><em class="episode">{{ d.episode }}. </em></td><td class="info {{ cycle(guide, i) }}-item" nowrap="1" width="1%">{{d.airdate|date("F jS, Y")}} at {{d.airdate|date("g:ia")}}<br><a href="http://localhost/twigtest/">{{ d.channel }}</a></td></tr><tr><td colspan="2" class=" 
{{ cycle(guide, i) }}-item description"><p>{{ d.epinfo }} <a href="http://localhost/twigtest/">read more</a></p></td></tr> 
    {% endfor %} 
    {% endfor %} 
</tbody></table> 

和 的index.php:

<?php 
// include and register Twig auto-loader 
include 'Twig/Autoloader.php'; 
Twig_Autoloader::register(); 

// attempt a connection 
try { 
    $dbh = new PDO('mysql:dbname=tvguidetest;host=localhost', 'test', 'test'); 
} catch (PDOException $e) { 
    echo "Error: Could not connect. " . $e->getMessage(); 
} 

// set error mode 
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

// attempt some queries 
try { 
    // execute SELECT query 
    // store each row as an object 
    $sql = "SELECT programme, channel, episode, epinfo, airdate FROM coronationst where airdate > NOW() ORDER BY expiration ASC LIMIT 20 OFFSET 0"; 
    $sth = $dbh->query($sql); 
    while ($row = $sth->fetchObject()) { 
    $data[] = $row; 
    } 

    // close connection, clean up 
    unset($dbh); 

    // define template directory location 
    $loader = new Twig_Loader_Filesystem('templates'); 

    // initialize Twig environment 
    $twig = new Twig_Environment($loader, array('debug' => true, 'autoescape' => false)); 
    $twig->addExtension(new Twig_Extension_Text()); 

    // load template 
    $template = $twig->loadTemplate('index.html'); 


    // set template variables 
    // render template 
    echo $template->render(array (
    'data' => $data 
)); 

} catch (Exception $e) { 
    die ('ERROR: ' . $e->getMessage()); 
} 
?> 

數據顯示正確....除了它是由於我的代碼中{%for i in 0..10%}而重複它自己,所以我怎樣才能讓它顯示一次呢?

這些都是我的記錄(注意,表名是d.TABLENAME以上的index.html):

1個加冕街通道1 10:00 PM 550集這是信息 2加冕街通道2上午6:45插曲549信息去這裏 和8個更多類似的記錄。

如何解決重複記錄時沒有重複的問題? (即每個記錄不同,至少對於情節/描述/頻道字段,內容不相同,至少)?

+0

也許你的回答你的問題你自己,但是那將是怎樣,讓我們​​知道,如果我們的答案可以幫助你甚至接受答案。只是提醒,因爲我很好奇,如果我的解決方案會按照建議工作 – SirDerpington 2013-05-04 16:02:52

回答

2

在for循環中,您可以訪問當前索引 - 從0或1開始。因此,在您的示例中,您可以省略第二個for循環,並用下面的示例替換變量「i」。

documentation

內部的for循環塊你可以訪問一些特殊的變量:

loop.index循環的當前迭代。 (1索引)

loop.index0循環的當前迭代。 (0索引)

還有給

{% for user in users %} 
    {{ loop.index }} - {{ user.username }} 
{% endfor %} 

我很抱歉,但你的HTML /樹枝標記有點刺激性的例子。我試圖把它清理一下。

<table id="show-time-results"> 
    <tbody> 
     <tr> 
      {% for d in data %} 
       {% set guide = ['odd', 'even'] %} 
       <td class="{{ cycle(guide, i) }}-item name"> 
        <a href="http://localhost/twigtest/">{{ d.programme }}</a> 
        <br> 
        <em class="episode">{{ d.episode }}.</em> 
       </td> 
       <td class="info {{ cycle(guide, {{ loop.index0 }}) }}-item" nowrap="1" width="1%"> 
        {{ d.airdate|date("F jS, Y") }} at {{ d.airdate|date("g:ia") }} 
        <br> 
        <a href="http://localhost/twigtest/">{{ d.channel }}</a> 
       </td> 
     </tr> 
       <tr> 
        <td colspan="2" class="{{ cycle(guide, {{ loop.index0 }}) }}-item description"> 
         <p>{{ d.epinfo }} 
          <a href="http://localhost/twigtest/">read more</a> 
         </p> 
        </td> 
       </tr> 
      {% endfor %} 
    </tbody> 
</table> 

通知書丟失的第二for loop{{ cycle(guide, i) }}得到了由{{ cycle(guide, {{ loop.index0 }}) }}

取代現在我不能對它進行測試,所以如果它不能正常工作,請這麼好心和downvoting之前通知我^^

編輯

這應該是工作的例子。在這方面你不需要{{ ... }}loop.index0

{{ cycle(guide, loop.index0) }} 
0

您可以致電{% for %}與索引,以避免第二環:

{% for i, d in data %} 
    <td class="{{ cycle(['odd', 'even'], i) }}-item name"> 
    (...) 
    </td> 
{% endfor %} 

這當然假設你的data陣列具有數字鍵。

有關詳細信息,請參閱documentation

如果陣列沒有數字鍵,你可以模擬數字鍵與抗衡:

{% set i = 0 %} 
{% for d in data %} 
    <td class="{{ cycle(['odd', 'even'], i) }}-item name"> 
    (...) 
    </td> 
    {% set i = i + 1 %} 
{% endfor %}