Пытаюсь в тег <a > в адрес прописать путь в папку к большим изображениям, чтобы при просмотре выдавало одно изображение(Большое), а в теге <img> на сайте отображалось другое изображение. получаю массив на выходе PHP: Array ( [0] => Array ( [C_DATE] => 0000-00-00 00:00:00 [picture_big] => Array ( [0] => b_s111_1.jpg [1] => b_s111_2.jpg [2] => b_s111_3.jpg [3] => b_s111_4.jpg ) [picture_huge] => Array ( [0] => huge/h_s222_1.jpg [1] => huge/h_s222_2.jpg [2] => huge/h_s222_3.jpg [3] => huge/h_s222_4.jpg ) PHP: {foreach $rsProduct as $item} <a class="nivLightBox" href="http://site.local/picture/huge/{$item['picture_huge']}" > <img src="../ru/picture/{$item['picture_big']}" alt="" /> </a> {/foreach} но в на выходе получаю array вместо изображений: HTML: <a class="nivLightBox" href="http://site.local/picture/huge/array" > <img src="../ru/picture/array" alt="" /> </a>
так у вас вложенные массивы.... поменяйте чтоб данные были вида Код (Text): ( [0] => Array ( [0] => ( [C_DATE] => 0000-00-00 00:00:00 [picture_big] => b_s111_1.jpg [picture_huge] => huge/h_s222_1.jpg ) [1] => ( [C_DATE] => 0000-00-00 00:00:00 [picture_big] => b_s111_1.jpg [picture_huge] => huge/h_s222_1.jpg ) ) либо цикл в цикле .. что не совсем хорошо в вашей задаче
цикл в цикле пробовал, но у меня тогда прокручивает и много дублей вылетает, так как сначала цикл срабатывает на тег а, а потом на тег img а конкретнее где необходимо поменять? мне же надо вывести все пришедие изображения, а не одно первое. Если я правильно понимаю процитированный вами код. --- Добавлено --- Может как то можно прокрутить {section}? я читал что можно, но немного сложнее чем через foreach.
я как пример только показал формирование данных для двух элементов... - формируйте как хотите просто логичнее было бы имено чтоб элементами массива были - даты изображения, их полное фото, превьюшка..... а у вас получается - одна дата + 5 фото одного разрешения в одном элементе, а в другом элементе 5 фото другого разрешения я предлагаю формировать данные по другому .. оставив шаблон таким ну или Код (Text): {foreach $rsProduct as $item} {foreach $item as $e} <a class="nivLightBox" href="http://site.local/picture/huge/{$e['picture_huge']}" > <img src="../ru/picture/{$e['picture_big']}" alt="" /> </a> {/foreach} {/foreach}
вот код формирования массива на выдачу: PHP: ..... if (mysql_num_rows($rs)!= 0) { $smartyRs = array(); while ($row = mysql_fetch_assoc($rs)) { $result = $row['id_product']; $itemId = intval($itemId); $sql = "SELECT `id_product`, GROUP_CONCAT(`picture_big` ORDER BY `ordera` DESC) as `picture_big`, GROUP_CONCAT(CONCAT(IFNULL(`picture_huge`, `picture_big`)) ORDER BY `ordera` DESC) as `picture_huge` FROM `pictures` GROUP BY `id_product` = '{$result}' "; $res = mysql_query($sql); if (mysql_num_rows($res) != 0){ while($row1 = mysql_fetch_assoc($res)) { if($row1['id_product'] == $result){ $piecesBig = explode(",", $row1['picture_big']); $row['picture_big'] = $piecesBig; $row1['picture_huge'] = explode(",", $row1['picture_huge']); $row['picture_huge'] = array_map(function ($str) { return 'huge/'.$str; }, $row1['picture_huge']); } } } $smartyRs[] = $row; } } return $smartyRs; }
так у вас в бд так записано .. по несколько картинок или берите только одну из них PHP: $row['picture_big'] = $piecesBig[0]; или что то там с логикой непонятно ... что вы хотите в результате?
у меня в бд так записано, идет несколько строк к примеру id_product - 100 у этого id_product изображений может быть 8 или 4 (любое кол-во), соответсвенно он в таблице занимает несколько строк, а когда я вытягиваю, я объединяю так как у продукта в столбце picture_big будет носколько фото
Это уже смарти не дает, первый цикл в смарти прогоняет тег а, если у него 4 изображения, закинет 4, потом заходит в тег img там цикл крутит, в итоге в каждом из 4 полученых блоков по 4 дубля --- Добавлено --- читал по смарти документацию, но что-то не особо понял как быть в этой ситуации, хотя другие элементы через {foreach} в смарти нормально проходят, без косяков.
А давайте вы просто по человечески скажите - что вы хотите получить в результате на основе представленных даных...? Например для каждого элемента - 4 картинки обернутых в ссылки такието...или что?
в теге img выводить изображение, а в ссылке в теге <а> прописать ссылку на такое же, только большое изображение, при клике на изображение, срабатывает плагин просмотра изображений и отображает уже большое изображение.
а код что приводил выше Код (Text): {foreach $rsProduct as $item} {foreach $item as $e} <a class="nivLightBox" href="http://site.local/picture/huge/{$e['picture_huge']}" > <img src="../ru/picture/{$e['picture_big']}" alt="" /> </a> {/foreach} {/foreach} не так разве выводит?
нда.. был неправ.. запустил попробовать предлагаю привести данные к такому виду - тогда все норм Код (Text): Array ( [0] => Array ( [C_DATE] => 0000-00-00 00:00:00 [picture] => Array ( [0] => Array ( [big] => b_s111_1.jpg [huge] => huge/h_s222_1.jpg ) [1] => Array ( [big] => b_s111_2.jpg [huge] => huge/h_s222_2.jpg ) [2] => Array ( [big] => b_s111_3.jpg [huge] => huge/h_s222_3.jpg ) [3] => Array ( [big] => b_s111_3.jpg [huge] => huge/h_s222_3.jpg ) ) ) [1] => Array ( [C_DATE] => 2000-00-00 00:00:00 [picture] => Array ( [0] => Array ( [big] => b_s111_1.jpg [huge] => huge/h_s222_1.jpg ) [1] => Array ( [big] => b_s111_2.jpg [huge] => huge/h_s222_2.jpg ) [2] => Array ( [big] => b_s111_3.jpg [huge] => huge/h_s222_3.jpg ) [3] => Array ( [big] => b_s111_3.jpg [huge] => huge/h_s222_3.jpg ) ) ) ) 0000-00-00 00:00:00 b_s111_1.jpg -> huge/h_s222_1.jpg b_s111_2.jpg -> huge/h_s222_2.jpg b_s111_3.jpg -> huge/h_s222_3.jpg b_s111_3.jpg -> huge/h_s222_3.jpg 2000-00-00 00:00:00 b_s111_1.jpg -> huge/h_s222_1.jpg b_s111_2.jpg -> huge/h_s222_2.jpg b_s111_3.jpg -> huge/h_s222_3.jpg b_s111_3.jpg -> huge/h_s222_3.jpg шаблон Код (Text): {foreach $rsProduct as $item} <hr/>{$item.C_DATE}<br/> {foreach $item.picture as $e} {$e.big} -> {$e.huge} <a class="nivLightBox" href="http://site.local/picture/huge/{$e.huge}" > <img src="../ru/picture/{$e.big}" alt="" /> </a> {/foreach} {/foreach}
Я как понимаю под такую структуру мне придется изменить обращение к бд удалить GROUP_CONCAT и вытягивать с бд по другому
ну точ, то что-то придется менять - это точно ))) можете преобразовывать полученный массив из полученного запроса, можете сам запрос
PHP: while($row1=mysql_fetch_assoc($res)){ $img1 = explode(",", $row1['picture_big']); $img2 = explode(",", $row1['picture_huge']); $pic = []; $i = 0; foreach ($img1 as $img) { $pic[] = ['big'=>$img,'huge'=>$img2[$i]; $++; } $row[picture'] = $pic; }
благодарю, уже исправил, дело еще было $++; не указана переменная, не доглядел --- Добавлено --- Благодарю за помощь, все заработало!)
AdSoft, а вот еще такой вопрос, если у меня в столбце `picture_huge` у продукта указано NULL, я в запросе : меняю NULL на изображение с `picture_big` в этой же строке. А так как изображения в разных папках, следовательно тогда мне надо прописать условие, в котором говорится, если в `picture_huge` есть изображение, то он добавляет название папки- ('huge/') перед изображение PHP: $ array_map(function ($str) { return 'huge/'.$str; }, $row1['picture_huge']); а если `picture_huge` == NULL, то тогда не добавляет название папки- ('huge/'). Прописывал условие, что-то не реагирует.