2012-10-04 2 views
2
<? 
/////////////////////// 
/////////////////////// 
$OriginalUrlToDisplay=strtok($_SERVER["REQUEST_URI"],'?'); 
$buttonTypeForColours="radio"; 
/////////////////////// 
/////////////////////// 
?> 
<form> 
<input type="<?=$buttonTypeForColours ?>" name="colourChoice[]" <? if($_GET["filter"]=="White"){?> onclick="location.href='<?=$OriginalUrlToDisplay?>'" checked="checked" <? } else {?> onclick="location.href='?filter=White'"<? } ?>/> <img src="http://www.gc-cdn.com/mobile/white.png" /> White<br /> 
<input type="<?=$buttonTypeForColours ?>" name="colourChoice[]" <? if($_GET["filter"]=="Black"){?> onclick="location.href='<?=$OriginalUrlToDisplay?>'" checked="checked" <? } else {?> onclick="location.href='?filter=Black'"<? } ?>/> <img src="http://www.gc-cdn.com/mobile/black.png" /> Black<br /> 
</form> 

Existe-t-il une façon plus simple d'écrire ceci? Il y a plus de 40 couleurs. Je sais que ce n'est pas très intensif en données mais difficile à lire et à gérer.PHP - Puis-je faire cela sinon dans un extrait nettoyant comme un tableau et une boucle?

+3

Avez-vous essayé une fonction? – hakre

+0

D'accord ^, utilisez simplement une simple boucle pour générer le code HTML. – Scott

Répondre

3

Vous pouvez facilement en boucle comme ceci:

<?php 

$colors = array("White", "Black", "Green", "..."); 
foreach ($colors as $color) { 
    echo '<input type="', $buttonTypeForColours, '" name="colourChoice[]"', 
     $_GET["filter"] == $color 
      ? 'onclick="location.href=\'?\'" checked="checked"' 
      : 'onclick="location.href=\'?filter=' . $color . '\'"', 
     ' /><img src="http://www.gc-cdn.com/mobile/', strtolower($color), '.png" /> ', $color, '<br />' 
     ; 
} 

?> 

Il est creux en boucle toutes les couleurs possibles spécifiées dans $colors et affiche ensuite la sortie à droite en utilisant une en chaîne ternary operator.

Vous pouvez aussi facilement faire une comparaison non sensible à la casse en changeant

$_GET["filter"] == $color 

à

strcasecmp($_GET["filter"], $color) === 0 
0

Faites juste quelque chose comme ça;

<form> 
<?php 
$colours = array('black', 'white', 'yellow', 'green', '...'); 
foreach($colours as $colour): 
    $url = $_GET['filter'] == $colour || $_GET['filter'] == ucfirst($colour) ? $OriginalUrlToDisplay : '?filter='. ucfirst($colour); 
?> 
    <input type="<?php echo $buttonTypeForColours; ?>" name="colourChoice[]" onclick="location.href='<?php echo $url; ?>'" checked="checked" /> <img src="http://www.gc-cdn.com/mobile/white.png" /> White<br /> 
<?php 
endforeach; 
?> 
</form> 

BTW; si vous utilisez un bouton radio, n'ajoutez pas [] au nom (sauf si vous voulez vraiment utiliser un tableau avec un seul élément en php). Normalement, vous n'utilisez cette notation que pour les cases à cocher où plusieurs options sont autorisées.

Remarque: Je ne vous conseille PAS d'utiliser une instruction d'écho courte (<?="print this" ?>) car elle n'est pas prise en charge par défaut sur chaque machine. En outre, il améliore à peine la lisibilité (bien que ce soit personnel)

+1

Pour l'actuelle version stable de PHP 5.4 et les versions futures, elle est (' hakre

-1

Que diriez-vous de casser dans plusieurs lignes et d'utiliser la sintax alternative de PHP? comme:

<?php if(...): ?> 
    <sometag></sometag> 
<?php endif; ?> 
+0

Je ne sais même pas ce que cela signifie. -1 – TheBlackBenzKid

+0

Le [php alternative sintax] (http://php.net/manual/fr/control-structures.alternative-syntax.php) s'est avéré très utile pour moi lors de l'écriture de vues plus belles. Je pensais juste que ça pourrait t'aider aussi. –

Questions connexes