2009-08-14 5 views
0

すべての国リストをASC順に表示する必要があります。しかし、アルファベットのすべての終わりの間にラインがあります。このPHPを使用しているとSMARTYすべての国リストをASC順に表示する必要があります。すべてのアルファベットの末尾に改行があります。

例:

アメリカ

オーストラリア


ベルギー


インド


上記のように私はO/Pを表示する必要があります。

私のクエリは、私がために、すべてのcountiresを取得しています上記のクエリを実行することにより

$str = 'A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,Y,Z'; 
$let=explode(',', $str, 24); 

for($i=0; $i<25; $i++) 

{ 

    $letter = $let[$i][0]; 

    $select="select *from tbl_country where Country_name like '".$letter."%' ORDER BY Country_name ASC"; 

    $country =$this->ExecuteQuery($select, "select"); 

    $objSmarty->assign("letter",$letter); 

} 

$objSmarty->assign("Exe_Wcat",$country); 

です。しかし、どのように私は改行を挿入する必要がありますか?

事前のおかげで...

フェロ

+1

xで始まる国はどうですか? –

+0

@Dominic、ありますか? @Fero ASCII以外の文字を持つ国はどうですか? –

答えて

2

あなたのテンプレートコードで国のリストをループしている場合は、国の最初の文字が最後に比べて変化しているかどうかを確認しループ反復。その場合は、水平線を出力します。

最初の文字を取得するには、サブプラグインを使用することができますがhereを述べた:

{$country|substr:0:1} 

あなたはその変数の出力キャプチャすることができます:

{capture name=letter} 
    {$country|substr:0:1} 
{/capture} 

を...そしてでそれを確認してください最後のキャプチャに対するループの先頭:

{if $smarty.capture.letter ne ''} 
    {if $smarty.capture.letter ne $country|substr:0:1} 
     <hr /> 
    {/if} 
{/if} 

psそれが最後だかどうかを見つけることについてのコメントあたり

{if $smarty.capture.letter ne $smarty.capture.letter2} 

編集:あなたは何かなどを行うことができますので、私は、上記インナーif文の構文についてはかなりよく分からない、あなたは二回、国の手紙をキャプチャする必要がある場合がありますループの反復 - からthe docs

{foreach from=$items key=part_id item=prod name=products} 
    <a href="#{$part_id}">{$prod}</a>{if $smarty.foreach.products.last}<hr>{else},{/if} 
{foreachelse} 
+0

+1この方法を使用すると、SQLを変更して、現在行っている25の代わりに1つのselectだけを実行することもできます – Glen

+0

最後のループの反復をスマートに取得する方法を教えてください – Fero

+0

@Fero - dが大好きですが、ドキュメント(http://www.smarty.net)は私のためにダウンしています。なぜあなたは見ていないのですか? –

関連する問題