2009-08-14 3 views
0

Je suis dans le besoin d'afficher toute la liste des pays dans l'ordre ASC. Mais avec une ligne entre chaque extrémité des alphabets. Ceci est en utilisant PHP et SmartyVous devez afficher tous les pays Liste dans l'ordre ASC Avec un saut de ligne à la fin de chaque alphabets

Exemple:

Amérique

Australie


Belgique


Inde


Comme ci-dessus j'ai besoin d'afficher le O/P.

Ma requête est

$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); 

En exécutant la requête ci-dessus je reçois tous les countires COMMANDEZ. Mais comment dois-je insérer le saut de ligne?

Merci à l'avance ...

Fero

+1

Qu'en est-il des pays commençant par x? –

+0

@Dominic, y en a-t-il? @Fero Qu'en est-il des pays avec des caractères non-ASCII? –

Répondre

2

Lorsque vous bouclez dans la liste des pays dans votre code de modèle, vérifiez si la première lettre du pays a changé par rapport à la dernière boucle d'itération. Si c'est le cas, affichez une ligne horizontale.

Pour obtenir la première lettre, vous pouvez utiliser le plugin mentionné here sous-chaîne:

{$country|substr:0:1} 

Vous pouvez capturer la sortie de cette variable:

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

... puis vérifier à le haut de votre boucle contre la dernière capture:

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

ps Je ne suis pas tout à fait sûr de la syntaxe de l'instruction if intérieure ci-dessus, vous pourriez avoir à capturer la lettre du pays deux fois, alors vous pouvez faire quelque chose comme:

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

Modifier par commentaire de savoir si elle est la dernière itération de la boucle - de 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 En utilisant cette approche, vous pouvez également modifier votre SQL afin que vous n'effectuiez qu'un seul choix au lieu des 25 que vous êtes en train de faire. – Glen

+0

Pouvez-vous me dire comment obtenir la dernière boucle d'itération dans smarty – Fero

+0

@Fero - I ' J'adore, mais la documentation (http://www.smarty.net) est pour moi. Pourquoi ne jetez-vous pas un coup d'oeil? –

Questions connexes