Помогите с циклом foreach PHP - PullRequest
0 голосов
/ 09 октября 2010

В настоящее время создается плагин Wordpress, который позволяет использовать несколько слайдеров изображений.На данный момент, чтобы убедиться, что код корректен, мне нужно загрузить динамические стили каждого ползунка в теги.Это нормально, однако загружает стили для всех ползунков, которые действительно могут начать добавлять много кода в исходный код страницы, если пользователи используют много ползунков изображений.

Так что я пытаюсь получитьстиль, который будет добавлен к тегам, только если слайдер действительно отображается на странице.Это возможно?Вот как я сейчас отображаю стиль:

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
 }
}

Как мне этого добиться?

Для отображения кода выше я использую:

add_action('wp_head','test');

отобразить слайдер ($ id является идентификатором этого конкретного слайдера; 1, 2, 3 и т. д.):

premium_slider($id);

Ответы [ 2 ]

0 голосов
/ 09 октября 2010

Как вы определяете, какие ползунки появляются на странице? По сути, вам нужно изменить запрос так, чтобы он был таким же, как тот, который фактически загружает ползунки, таким образом, CSS будет загружаться только для отображения тех же ползунков.

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

Это только загрузит элементы в массив foreach, которые отображаются на этой конкретной странице.

0 голосов
/ 09 октября 2010

Это довольно сложный вопрос.Прежде всего, я не одобряю использование вами глобальной переменной, особенно ресурса БД.Мне также непонятно, почему вам нужно отображать стили напрямую таким образом.

Теперь, чтобы помочь вам:

Единственный способ действительно решить эту проблему, который я вижу, это если выхраните все стили, например, БД, файл конфигурации или что-то подобное для каждого стиля.Вы должны знать стили заранее, потому что вы жестко их кодируете здесь.Так что просто пролистайте, и если идентификатор вашего слайдера соответствует его стилю, напечатайте стиль.Если бы вы сохранили все стили в большом массиве в другом php-файле, хэшированном с идентификатором ползунка, это было бы просто.

...