Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > динамический вывод


Автор: alexey664655 3.7.2014, 16:00
Здравствуйте уважаемые форумчане помогите.
Есть динамический вывод галереи 
Код

<?php if (is_array($this->items)){ ?>
<?php foreach ($this->items as $item){ ?>
    <div class="client_ci_container"  >
<a  id="link_<?php echo $item->lot_id;?>"      style=" text-decoration: none;"  
 href="#" onclick="show_full(this,<?php echo $item->lot_id;?>);
return false;" title="<?php echo $item->lot_name;?> подробнее">
<div class="client_ci_container_inner">
<div style="padding:2px 0px; height:37px; overflow: hidden;">
        <P style="color:#3333CC;font-weight:bold;"> <?php echo $item->lot_name;?></P>
        </div>
        <div class="client_ci_img_container" style="height:200px;padding:5px;">
                <div class="w100">
<center>
<img id="item_<?php echo $item->lot_id;?>" class="img" style="max-height: 175px; max-width: 175px; " src="<?php echo $item->image_url;?>" />
</center>
        </div>    </div></div></a></div>    <?php }?><?php }?>


Формируется она так
имя картинки1
id картинки1
адрес картинки1

имя картинки2
id картинки2
адрес картинки2

имя картинки3
id картинки3
адрес картинки3
и т.д.

интересует меня строка в которой выводится id картинки
Код

onclick="show_full(this,<?php echo $item->lot_id;?>);


Как сделать чтоб в ней отображалось не одно,а 3-и id.
Вот так 
имя картинки1
id картинки0 id картинки1, id картинки2
адрес картинки1


имя картинки2
id картинки1, id картинки2, id картинки3
адрес картинки2



имя картинки3
id картинки2, id картинки3, id картинки0
адрес картинки3


на начальных и конечных картинках обязательно нулевые по канцам id

Автор: krundetz 3.7.2014, 16:48
 smile 

так у вас и так в цикле все обрабатывается или вы чего то не договариваете?

Автор: alexey664655 3.7.2014, 17:02
выводится id только к каждой картинке, а мне надо чтоб вывод был предыдущей, этой и следующей  вот здесь 
Код
onclick="show_full(this,<?php echo $item->lot_id;?>);


таким вот образом 
если первоя картинка(id у них могут быть разные но идут с верху в низ)
onclick="show_full(this,0,1,2);

вторая картинка 
onclick="show_full(this,1,2,3);


Код

Array
(
    [0] => stdClass Object
        (
            [lot_id] => 270707
            [catalog_id] => 4861
            [lot_name] => Пластырь от варикоза и васкулита 38 Fule Vasculitis, 4 шт.
            [lot_cost] => 380.00
            [lot_orgrate] => 15
            [lot_properties] => s:0:"";
            [lot_description] => Варикоз и васкулит Производитель: "Shaanxi Sanba Fule Technology Stock Co., Ltd", Китай
            [lot_url] => 
            [lot_cat] => 
            [lot_img] => a:1:{i:0;s:36:"50e1ec82533b8bde08c36714d42b80f5.jpg";}
            [lot_hidden] => 0
            [lot_bundle] => s:0:"";
            [purchase_id] => 1321
            [catalog_name] => Уход за ногами
            [catalog_orgrate] => 15
            [catalog_properties] => N;
            [catalog_bundle] => 
            [catalog_hide] => 0
            [purchase_name] => Товары из Китая
            [purchase_url] => 2238
            [reserv_id] => 235
            [purchase_description] => ЯГОДЫ ГОДЖИ
 
            [purchases_rule1] => минимальная сумма заказа:5000
            [purchases_rule2] => минимальное количество товара:
            [purchases_rule3] => орг %:15%
            [purchases_rule4] => 0
            [purchases_rule5] => 0
            [purchases_rule6] => Омск
            [purchases_rule7] => 7
            [purchases_rule8] => 
            [purchases_rule8_0] => 1
            [purchases_rule8_1] => 1
            [purchases_rule8_2] => 0
            [purchases_rule9] => 
            [purchase_hvast] => index.php?option=com_kunena&func=view&catid=16&id=332&Itemid=135#332
            [purchase_status_start] => 2014-05-15
            [purchase_status_stop] => 
            [purchase_status_billreciv] => 
            [purchase_status_payto] => 
            [purchase_status_shipping] => 
            [purchase_news] => 
            [purchase_coment] => 
            [payment_info] => 
            [purchase_admin_payment] => 
            [purchase_admin_money] => 
            [open] => 1
            [open_fix] => 0
            [status] => 1
            [arhiv] => 0
            [i_url] => p1027.jpg
            [hide_info] => 0
            [close] => 0
            [open_time] => 1400129447
            [sort] => 0
            [image_url] => images/lots/thumb/50e1ec82533b8bde08c36714d42b80f5.jpg
            [p_yes] => 0
        )
 
    [1] => stdClass Object
        (
            [lot_id] => 270708
            [catalog_id] => 4861
            [lot_name] => Пластырь от косточек на ногах "Hyperosteogeny", 4 шт.
            [lot_cost] => 150.00
            [lot_orgrate] => 15
            [lot_properties] => s:0:"";
            [lot_description] => Пластырь используется 
 
            [lot_url] => 
            [lot_cat] => 
            [lot_img] => a:1:{i:0;s:36:"36971ef5ba51b9a1f96e8eed952d5fd3.jpg";}
            [lot_hidden] => 0
            [lot_bundle] => s:0:"";
            [purchase_id] => 1321
            [catalog_name] => Уход за ногами
            [catalog_orgrate] => 15
            [catalog_properties] => N;
            [catalog_bundle] => 
            [catalog_hide] => 0
            [purchase_name] => Товары из Китая
            [purchase_url] => 2238
            [reserv_id] => 235
            [purchase_description] => ЯГОДЫ ГОДЖИ
            [purchase_description_max] => Всем привет!!! Я Екатерина.
 
            [purchases_rule1] => минимальная сумма заказа:5000
            [purchases_rule2] => минимальное количество товара:
            [purchases_rule3] => орг %:15%
            [purchases_rule4] => 0
            [purchases_rule5] => 0
            [purchases_rule6] => Омск
            [purchases_rule7] => 7
            [purchases_rule8] => 
            [purchases_rule8_0] => 1
            [purchases_rule8_1] => 1
            [purchases_rule8_2] => 0
            [purchases_rule9] => 
            [purchase_hvast] => index.php?option=com_kunena&func=view&catid=16&id=332&Itemid=135#332
            [purchase_status_start] => 2014-05-15
            [purchase_status_stop] => 
            [purchase_status_billreciv] => 
            [purchase_status_payto] => 
            [purchase_status_shipping] => 
            [purchase_news] => 
            [purchase_coment] => 
            [payment_info] => 
            [purchase_admin_payment] => 
            [purchase_admin_money] => 
            [open] => 1
            [open_fix] => 0
            [status] => 1
            [arhiv] => 0
            [i_url] => p1027.jpg
            [hide_info] => 0
            [close] => 0
            [open_time] => 1400129447
            [sort] => 0
            [image_url] => images/lots/thumb/36971ef5ba51b9a1f96e8eed952d5fd3.jpg
            [p_yes] => 0
        )
[2] => stdClass Object
        (

Автор: Aliance 3.7.2014, 17:42
Нужно заменить foreach на for и обращаться к элемента с индексом на единицу меньше и больше текущего.

Что нужно выводить для первой/последней итерации?

И что эта тема делала в разделе для профи?

Автор: alexey664655 4.7.2014, 05:36

если заменить  foreach на for то у меня перестает отображаться в галереи картинки, ток как надо менять, наверно сам вывод?
Код

<?php echo $item->lot_id;?>

и
Код

<?php echo $item->image_url;?>


для первой и последней я писал выше, в месте вывода где мне надо поменять выводится сейчас:

 например первая картинка
Код

onclick="show_full(this,1>);


последняя картинка
Код

onclick="show_full(this,5>);


то есть все по порядку
а мне надо  чтоб выводилось 

Код

onclick="show_full(this,0,1,2>);



последняя картинка
Код

onclick="show_full(this,4,5,0>);




Автор: _zorn_ 4.7.2014, 06:16
А ничего, что придется переписывать яваскрипт функцию show_full ?
Видимо ты чего то не понимаешь. Объясни ВНЯТНО чего хочешь добиться (без этих вот "вот тут в коде").

Автор: alexey664655 4.7.2014, 06:46
так на пальцах все объяснил, надо чтоб в выводе в место одного id выводилось три (предыдущее id картинки, этой и следующей через запятую) и так по порядку, на первой кортике (0-так как перед ней нет картинки, свой id, следующий) на последней картинки (предыдущий id, свой, 0- так как следующей нет)  

Автор: _zorn_ 4.7.2014, 08:17
Где там вывод айдишников то ? Вижу только вызов яваскрипт функции с параметром айди картинки.
Если сделать именно так как ты ПРОСИШЬ - ничего работать не будет, т.к. нужно будет переписывать функцию show_full на прием 4 параметров вместо двух.
Я прошу чтобы ты объяснил чего ты ХОЧЕШЬ добиться.

Цитата
если заменить  foreach на for то у меня перестает отображаться в галереи картинки

Наверное нужно менять ПОНИМАЯ что ты делаешь, не ?
Код

for ($i=0;$i<count($this->items);$i++){
$item = $this->items[$i];
if($i==0) $prev_id = 0;
else $prev_id = $this->items[$i-1]->lot_id;
$cur_id = $item->lot_id;
if(($i+1)>=count($this->items)) $next_id = 0;
else $next_id = $this->items[$i+1]->lot_id;

Автор: Aliance 4.7.2014, 09:10
Я бы все же еще проверял предыдущий/следующий элемент на isset. Ну и count стоит вынести из цикла.

Автор: _zorn_ 4.7.2014, 10:02
Цитата(Aliance @  4.7.2014,  17:10 Найти цитируемый пост)
Я бы все же еще проверял предыдущий/следующий элемент на isset. Ну и count стоит вынести из цикла. 

На коленке же. Даже не проверял smile
А вообще только isset можно было и обойтись. Ну а вынос count... ну не знаю. Даже если будет выигрыш (компилятор байткода не оптимизирует for ?) то очень смешным.

Автор: alexey664655 4.7.2014, 10:42
Спасибо за понимание в мое полном не знание, а в выводе с $item->image_url проблем не будет, проверить пока нечем

Автор: Aliance 4.7.2014, 11:05
Цитата(_zorn_ @  4.7.2014,  11:02 Найти цитируемый пост)
Ну а вынос count... ну не знаю. Даже если будет выигрыш (компилятор байткода не оптимизирует for ?) то очень смешным.

эм, смешным на каких цифрах? На массиве в 10 элементов и на сайте, который посещает 1,5 землекопа в сутки - возможно. Но лучше сразу приучать себя писать правильно, чтобы потом можно было без зазрения совести подавать резюме в хайлоад. И даже понимая что топикстартеру вряд ли это пригодится - лучше все же давать правильные советы. если интересно - вот https://josephscott.org/archives/2010/01/php-count-performance/ на эту тему.

Добавлено через 39 секунд
Цитата(alexey664655 @  4.7.2014,  11:42 Найти цитируемый пост)
Спасибо за понимание в мое полном не знание, а в выводе с $item->image_url проблем не будет, проверить пока нечем 

это вопрос? а то вопросительного знака не стоит и не понятно, нужно ли отвечать или это мысли вслух.

Автор: alexey664655 4.7.2014, 11:31
Конечно это вопрос? Мыслей у меня пока нет..... 

Автор: Aliance 4.7.2014, 12:54
Возьмите и проверьте, если будет - напишите сюда ошибку и вам подскажут. Зачем пальцем-то в небо тыкать?

Но если вы напишите так:
Код

for ($i = 0, $length = count($this->items); $i < $length; $i++) {
    $item = $this->items[$i];
   // ...
    echo $item->image_url;
   // ...
}

а в $this->items будет хранится массив объектов, у которых будет поле image_url - то проблем не будет.

Автор: alexey664655 4.7.2014, 15:04
все получилось, прекрасно работает, но появилась маленькая проблемка, при перелистывании страниц картинки не отображаются, подскажите, в чем может быть проблема

Автор: Aliance 4.7.2014, 17:01
Цитата(alexey664655 @  4.7.2014,  16:04 Найти цитируемый пост)
 при перелистывании страниц картинки не отображаются, подскажите, в чем может быть проблема 

что есть "перелистывание страниц"?

Автор: krundetz 4.7.2014, 23:29
Цитата(alexey664655 @  4.7.2014,  15:04 Найти цитируемый пост)
при перелистывании страниц картинки не отображаются, подскажите, в чем может быть проблема 

видимо поэтому
Цитата(_zorn_ @  4.7.2014,  06:16 Найти цитируемый пост)
А ничего, что придется переписывать яваскрипт функцию show_full ?


функция show_full принимает в себя 2 аргумента, а  теперь вы в нее передаете 4 вместо 2

Автор: alexey664655 7.7.2014, 09:15
перелистывание страниц это навигация в низу (1 2 3 4 и т.д. отображать по 60 (всего: 308) )
на первой странице все нармально отображается и работает, если ставишь отображать по 10 или по 100 ну  и т.д. тоже все работает, но если переходишь на другую страницу отображаться картинки перестают . 

функция show_full открывает расширенный вид картинки (описание, цена, и т.д.)

я добавил навигацию по картинкам в расширенном виде (лево  право), для чего собственно мне и нужны id рядом стоящих картинок.


Код

function list (previd,nextid) {
    if(previd && nextid == "-1") {
        jQuery('#link_'+previd).click();
    }else if(nextid && previd == "-1") {
        jQuery('#link_'+nextid).click();
    }else if(!nextid && previd == "-1"){
            }else if(!previd && nextid == "-1"){
            }
}


 и дописал в функцию show_full
Код

function show_full (link,previd,id,nextid)
{код расширенного вида
..............................
навигация в подробном виде
<div style="float: left; margin-top: 30%;"><a href="#" onclick="list('+previd+',-1); return false;" style="font-size: 50px; text-decoration: none;"><</a></div>
 
<div style="float: left; margin-top: 30%;"><a href="#" onclick="list(-1,'+nextid+'); return false;" style="font-size: 50px; text-decoration: none;">></a></div>
 
}




Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)