2010-10-09 20 views
0

Actuellement, la production d'un plugin Wordpress qui permet plusieurs curseurs d'image. Pour le moment, pour m'assurer que le code est valide, je dois charger chaque style dynamique des curseurs dans les tags. C'est bien, mais il charge le style pour tous les curseurs, ce qui peut vraiment commencer à ajouter beaucoup de code à la source des pages si les utilisateurs utilisent de nombreux curseurs d'image.Aide pour la boucle foreach PHP

Donc j'essaye d'obtenir que le style soit seulement ajouté aux étiquettes si le curseur est réellement affiché sur la page. Est-ce possible? Voici comment je suis en train d'afficher le style:

function test() { 
global $wpdb; 
$table_name = $wpdb->prefix . "premiumslider"; 
$number = $wpdb->get_results("SELECT * FROM $table_name"); 
foreach ($number as $slider) { ?> 
<style type="text/css"><?php if($slider->paginationstyle == 'icons') { ?> 
#lofslidecontent<?php echo $slider->id; ?> .lof-navigator li{<?php if($slider-  >paginationstyle=='icons'){ ?>background: url(<?php if($slider->paginationoff=='') echo WP_PLUGIN_URL.'/premium-slider/images/pagination.png'; if($slider->paginationoff!='') echo $slider->paginationoff; ?>) 0 0 no-repeat;<?php } ?>} 
#lofslidecontent<?php echo $slider->id; ?> .lof-navigator li.active{<?php if($slider->paginationstyle=='icons'){ ?>background: url(<?php if($slider->paginationon=='') echo WP_PLUGIN_URL.'/premium-slider/images/pagination_current.png'; if($slider->paginationon!='') echo $slider->paginationon; ?>) 0 0 no-repeat;<?php } ?>} 
<?php } ?> 
<?php if($slider->paginationstyle == 'images') { ?> 
#lofslidecontent<?php echo $slider->id; ?> .lof-navigator { margin-top: 50px; } 
#lofslidecontent<?php echo $slider->id; ?> .lof-navigator li img { border: <?php echo $slider->imgborder; ?>px solid #<?php echo $slider->imgcolour; ?>; } 
#lofslidecontent<?php echo $slider->id; ?> .lof-navigator li.active img { border: <?php echo $slider->imgborder; ?>px solid #<?php echo $slider->imghover; ?>; } 
#lofslidecontent<?php echo $slider->id; ?> .lof-navigator li.active img:hover { border: <?php echo $slider->imgborder; ?>px solid #<?php echo $slider->imghover; ?>; } 
    <?php } ?></style><?php 
} 
} 

Comment puis-je y parvenir?

Pour afficher le code ci-dessus j'utilise:

add_action('wp_head','test'); 

Et pour afficher le curseur ($ id étant l'identifiant de ce curseur particulier, 1, 2, 3, etc.):

premium_slider($id); 

Répondre

0

C'est une question compliquée. Tout d'abord, je vous dénigre pour l'utilisation d'une variable globale, en particulier une ressource DB. Je ne sais pas non plus pourquoi vous devez répercuter les styles directement de cette manière.

maintenant pour vous aider:

La seule façon de résoudre vraiment ce que je peux voir est que si vous avez tous les styles stockés quelque part, comme un DB, un fichier de configuration, ou une telle chose par le style . Vous devez connaître les styles à l'avance car vous les codifiez durement ici. Il suffit donc de passer à travers et si l'ID de votre curseur correspond à son style, imprimez le style. Si vous avez stocké tous les styles dans un grand tableau dans un autre fichier php haché avec l'ID du curseur, ce serait simple.

+1

Le $ wpdb global que vous voyez est en fait destiné à être utilisé comme un global par Wordpress. – neopickaze

+0

Il peut être passé en argument à la place. Wordpress est-il le roi du design? –

+0

La variable globale est nécessaire pour accéder à la base de données, donc pourquoi cela ne fonctionne pas si vous ne l'ajoutez pas; $ wpdb global. Comment pourriez-vous faire défiler les ID pour trouver une correspondance? Je ne pouvais pas le comprendre moi-même parce que vous ne pouvez pas passer un paramètes à la fonction test(); parce que add_action ('wp_head', 'test'); ne leur permet pas - ou alors je suis amené à croire; peut-être que vous pouvez, mais je ne peux pas comprendre comment. –

0

Comment déterminez-vous les curseurs qui apparaissent sur la page? Effectivement, vous devrez modifier votre requête pour qu'elle soit la même que celle qui charge réellement les curseurs, de cette façon le CSS ne sera chargé que pour afficher les mêmes curseurs.

$table_name = $wpdb->prefix . "premiumslider"; 
$number = $wpdb->get_results("SELECT * FROM $table_name WHERE category = 'cars'"); 

Cela ne chargerait que les éléments dans le tableau foreach qui sont affichés sur cette page particulière.

+0

Quelle est la signification de category = 'cars'? –