Вечер добрый Уважаемые. В php не точно новичок, просто 0, но крутиться нужно и вот собственно где проблема. Требуется сделать вывод статей плиткой метро, миниатюра и заголовок. Все это легко реализую через html и css, но ступор случился по части php. Имеется код: Код (Text): <?php get_header(); ?> <div id="container"> <!--block1--> <?php query_posts( array( 'cat' => 3, 'paged' => get_query_var('paged') ) ); ?> <?php while (have_posts()) : the_post(); ?> <div class="block1b"> <a href="<?php the_permalink(); ?>" rel="bookmark" ><?php echo get_the_post_thumbnail($page->ID, array(652,652)); ?></a> <div class="name1b"> <h2 class="Title1"> <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title(); ?>"><?php title_limit(62, '...'); ?></a> </h2> </div> </div> <?php endwhile;?> </div><!--/content--> <div class="clear"></div> <?php get_footer(); ?> Собственно все выводиться, но все блоки одинаковые выводятся в столбец, а хочется, как на скриншоте. Полагаю надо как то привязать 2 цикл, но 3 дня проб оказались безуспешными. Что удалось добиться так это работу постраничной навигации при query_posts и изменить количество выводимых постов, отличных только для этой категории через functions.php
Думаю самый простой способ это массив разбить по три элемента https://secure.php.net/manual/ru/function.array-chunk.php
Код (Text): <?php $arr=array('a', 'b', 'c', 'd', 'e', 'f'); print_r(array_chunk($arr, 3)); ?> Я понимаю мне вот этот вариант подойдет, но что за переназначение ключей по средствам true и false? И как это интегрировать в мой код. Я понимаю, что самый лучший совет учи матчасть и язык в целом, но на данном этапе развития мне хватает языка разметки для решения почти всех задач, однако есть моменты для допиливания которых требуется пых. И внутренний перфекционист ставит задачи не достижимые своим умом, по этому прошу терпения и помощи.
@SColhin я не вижу в твоём коде цикла, по этому могу помочь только советами и документацией. Попробуй просто отсчитывать в цикле до трёх, потом делать следующие три блока, сбрасывать счётчик и опять до трёх.
Это собственно весь код, у меня выводятся заголовок и миниатюра постов отсортированных по дате, из определенной рубрики.
точно, вижу while цикл, не досмотрел. ну вот, отсчитывай в цикле и принимай решения как тебе нужно через if
Буду благодарен за кусочек кода, я еще могу доработать с напильником чужой как то, но сам не пропишу. Знания пыха 0.
ну сделай по документации цикл с помощью for, от 0 до 15, и когда $i будет 5 выведи что-то, начнём с простого, дальше подскажу ещё --- Добавлено --- могу переместить тему в раздел "сделайте за меня", если кто-то захочет то поможет готовым кодом. это если ты не хочешь учить сам
Почему $i больше пяти, когда я просил ровно пять. Ну ладно, бывают недопонимания. Расскажи как этот код работает: PHP: <?php $tmp = 1; for ($i=1; $i < 100; $i++) { switch ($tmp) { case 1: echo "big left block<br>"; break; case 2: case 3: echo "small right blocks<br>"; break; case 4: case 5: echo "small left blocks<br>"; break; case 6: echo "right big block<br>"; break; } $tmp++; if ($tmp == 7) { $tmp = 1; } }
@SColhin, не понимаешь, потому что @denis01 попросил рассказать, как работает его пример, а ты просто запустил его и выложил скрин. Рассказать - это значит каждую строчку перевести с php на русский язык. Например, вот есть программа факториала: PHP: $f = 1; for ($i = 2; $i <= $n; $i++) { $f *= $i; } А вот как должен звучать рассказ о том, как это работает: Код (Text): 1. Записать в переменную $f число 1 2. Записать в переменную $i двойку 3. если $i > $n, перейти к шагу 7 4. Умножить значение переменной $f на значение $i, результат записать в $f 5. Увеличить $i на единицу 6. Перейти на шаг 3 7. Конец Вот распиши также пример, который тебе дал denis01, и всё станет понятно
1. $tmp присваиваем значение 1 2. $i присваиваем значение 1 3. при $tmp равным 1 выводим надпись "big left block", делаем перенос на строку 4. при $tmp равным 2,3 выводим надпись "small right blocks", делаем перенос на строку 5. при $tmp равным 4,5 выводим надпись "small left blocks", делаем перенос на строку 6. при $tmp равным 6 выводим надпись "right big block", делаем перенос на строку 7. если $tmp равен 7 начинаем с шага 3 8. выполнять, пока $i<100
Ну вот, цикл for можно убрать из моего кода, $tmp = 1 выносим до цикла while в твоём цикле, у тебя на картинке 2 больших блока и 2 маленьких, из моего кода перенеси всё что было в цикле в свой код, тоже в цикл, но уже while. Ну вместо надписей блоков, вставляй свой код блоков.
Код (Text): <?php query_posts( array( 'cat' => 3, 'paged' => get_query_var('paged') ) ); ?> <?php $tmp = 1; while (have_posts()) : the_post(); switch ($tmp) { case 1: echo "big left block<br>"; break; case 2: case 3: echo "small right blocks<br>"; break; case 4: case 5: echo "small left blocks<br>"; break; case 6: echo "right big block<br>"; break; } $tmp++; ?> Дошел до этого, теперь по непонятному. 1) Как вставить html код в "" говорят неграмотно, надо выносить из php. 2) Сейчас статьи выводятся независимо от добавленного кода, просто сверху приписывается надпись big left block и т.п.
Пример 1, но мне нравиться больше с фигурными скобками, я показал где $tmp больше 3 https://secure.php.net/manual/ru/language.basic-syntax.phpmode.php Короткая запись для echo <?=$tmp?> https://secure.php.net/manual/ru/function.echo.php Читай основы https://secure.php.net/manual/ru/language.basic-syntax.php но ещё лучше всю документацию + свежие книги для начинающих по PHP Вот ещё пример PHP: <?php query_posts( array( 'cat' => 3, 'paged' => get_query_var('paged') ) ); ?> <?php $tmp = 1; while (have_posts()) { the_post(); // это печатает весь пост? надо научить разные блоки печатать switch ($tmp) { case 1: ?> тут выводи пост, который отвечает за большой квадрат, big left block, вывод функций или переменных: <?=$tmp?><br> <?php break; case 2: case 3: ?> тут за меленькие правые, small right blocks<br>можно ещё так <?php if($tmp > 2) { ?> tmp больше чем два!!! <?=$tmp?> - это tmp <?php } ?><br> <?php break; case 4: case 5: echo "тут за левые и убери echo если надо и сделай как выше, small left blocks<br>"; break; case 6: echo "ту угадал что делать? right big block<br>"; break; } $tmp++; } ?>