За последние 24 часа нас посетили 34848 программистов и 1753 робота. Сейчас ищет 821 программист ...

Вывод анонсов статей.

Тема в разделе "PHP для новичков", создана пользователем SColhin, 9 июн 2016.

  1. SColhin

    SColhin Активный пользователь

    С нами с:
    9 июн 2016
    Сообщения:
    19
    Симпатии:
    5
    Вечер добрый Уважаемые.
    В php не точно новичок, просто 0, но крутиться нужно и вот собственно где проблема.

    Требуется сделать вывод статей плиткой метро, миниатюра и заголовок. Все это легко реализую через html и css, но ступор случился по части php.

    Имеется код:
    Код (Text):
    1.  
    2. <?php get_header(); ?>
    3.  
    4. <div id="container">
    5. <!--block1-->
    6.  
    7. <?php query_posts( array( 'cat' => 3, 'paged' => get_query_var('paged') ) ); ?>
    8. <?php while (have_posts()) : the_post(); ?>
    9.  
    10. <div class="block1b">
    11. <a href="<?php the_permalink(); ?>" rel="bookmark" ><?php echo get_the_post_thumbnail($page->ID, array(652,652)); ?></a>
    12.  
    13. <div class="name1b">
    14. <h2 class="Title1">
    15. <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title(); ?>"><?php title_limit(62, '...'); ?></a>
    16. </h2>
    17. </div>
    18.  
    19.  
    20. </div>
    21.  
    22. <?php endwhile;?>
    23. </div><!--/content-->
    24.  
    25.  
    26. <div class="clear"></div>
    27. <?php get_footer(); ?>
    Собственно все выводиться, но все блоки одинаковые выводятся в столбец, а хочется, как на скриншоте. Полагаю надо как то привязать 2 цикл, но 3 дня проб оказались безуспешными. Что удалось добиться так это работу постраничной навигации при query_posts и изменить количество выводимых постов, отличных только для этой категории через functions.php
     

    Вложения:

  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  3. SColhin

    SColhin Активный пользователь

    С нами с:
    9 июн 2016
    Сообщения:
    19
    Симпатии:
    5
    Благодарю за наводку, попробую разобраться, как это реализовать.
     
  4. SColhin

    SColhin Активный пользователь

    С нами с:
    9 июн 2016
    Сообщения:
    19
    Симпатии:
    5
    Код (Text):
    1. <?php
    2. $arr=array('a', 'b', 'c', 'd', 'e', 'f');
    3. print_r(array_chunk($arr, 3));
    4. ?>
    Я понимаю мне вот этот вариант подойдет, но что за переназначение ключей по средствам true и false? И как это интегрировать в мой код. Я понимаю, что самый лучший совет учи матчасть и язык в целом, но на данном этапе развития мне хватает языка разметки для решения почти всех задач, однако есть моменты для допиливания которых требуется пых. И внутренний перфекционист ставит задачи не достижимые своим умом, по этому прошу терпения и помощи.
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @SColhin я не вижу в твоём коде цикла, по этому могу помочь только советами и документацией.
    Попробуй просто отсчитывать в цикле до трёх, потом делать следующие три блока, сбрасывать счётчик и опять до трёх.
     
  6. SColhin

    SColhin Активный пользователь

    С нами с:
    9 июн 2016
    Сообщения:
    19
    Симпатии:
    5
    Это собственно весь код, у меня выводятся заголовок и миниатюра постов отсортированных по дате, из определенной рубрики.
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    точно, вижу while цикл, не досмотрел.
    ну вот, отсчитывай в цикле и принимай решения как тебе нужно через if
     
  8. SColhin

    SColhin Активный пользователь

    С нами с:
    9 июн 2016
    Сообщения:
    19
    Симпатии:
    5
    Буду благодарен за кусочек кода, я еще могу доработать с напильником чужой как то, но сам не пропишу. Знания пыха 0.
     
  9. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    ну сделай по документации цикл с помощью for, от 0 до 15, и когда $i будет 5 выведи что-то, начнём с простого, дальше подскажу ещё
    --- Добавлено ---
    могу переместить тему в раздел "сделайте за меня", если кто-то захочет то поможет готовым кодом. это если ты не хочешь учить сам
     
    SColhin нравится это.
  10. SColhin

    SColhin Активный пользователь

    С нами с:
    9 июн 2016
    Сообщения:
    19
    Симпатии:
    5
    Код (Text):
    1. <?php
    2. for ($i = 0; $i <= 15; $i++) {
    3. if ($i > 5) {
    4. }
    5. break; echo $i;
    6. }
    7. ?>
     
  11. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Запускал? работает?
     
  12. SColhin

    SColhin Активный пользователь

    С нами с:
    9 июн 2016
    Сообщения:
    19
    Симпатии:
    5
    Изменений не заметил, если вставить в код.
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Почему $i больше пяти, когда я просил ровно пять. Ну ладно, бывают недопонимания.

    Расскажи как этот код работает:
    PHP:
    1. <?php
    2. $tmp = 1;
    3. for ($i=1; $i < 100; $i++) {
    4.  
    5.     switch ($tmp) {
    6.         case 1:
    7.             echo "big left block<br>";
    8.             break;
    9.  
    10.         case 2:
    11.         case 3:
    12.             echo "small right blocks<br>";
    13.             break;
    14.  
    15.         case 4:
    16.         case 5:
    17.             echo "small left blocks<br>";
    18.             break;
    19.  
    20.         case 6:
    21.             echo "right big block<br>";
    22.             break;
    23.  
    24.     }
    25.  
    26.     $tmp++;
    27.  
    28.     if ($tmp == 7) {
    29.         $tmp = 1;
    30.     }
    31. }
     
  14. SColhin

    SColhin Активный пользователь

    С нами с:
    9 июн 2016
    Сообщения:
    19
    Симпатии:
    5
     

    Вложения:

  15. SColhin

    SColhin Активный пользователь

    С нами с:
    9 июн 2016
    Сообщения:
    19
    Симпатии:
    5
    Я понимаю что это как раз то что мне нужно, но не могу догнать, как посты в это все воткнуть.
     
  16. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    @SColhin, не понимаешь, потому что @denis01 попросил рассказать, как работает его пример, а ты просто запустил его и выложил скрин. Рассказать - это значит каждую строчку перевести с php на русский язык. Например, вот есть программа факториала:
    PHP:
    1. $f = 1;
    2.  
    3. for ($i = 2; $i <= $n; $i++) {
    4.    $f *= $i;
    5. }
    А вот как должен звучать рассказ о том, как это работает:
    Код (Text):
    1.  
    2. 1. Записать в переменную $f число 1
    3. 2. Записать в переменную $i двойку
    4. 3. если $i  > $n, перейти к шагу 7
    5. 4. Умножить значение переменной $f на значение $i, результат записать в $f
    6. 5. Увеличить $i на единицу
    7. 6. Перейти на шаг 3
    8. 7. Конец
    Вот распиши также пример, который тебе дал denis01, и всё станет понятно
     
  17. SColhin

    SColhin Активный пользователь

    С нами с:
    9 июн 2016
    Сообщения:
    19
    Симпатии:
    5
    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
     
  18. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Ну вот, цикл for можно убрать из моего кода, $tmp = 1 выносим до цикла while в твоём цикле, у тебя на картинке 2 больших блока и 2 маленьких, из моего кода перенеси всё что было в цикле в свой код, тоже в цикл, но уже while. Ну вместо надписей блоков, вставляй свой код блоков.
     
  19. SColhin

    SColhin Активный пользователь

    С нами с:
    9 июн 2016
    Сообщения:
    19
    Симпатии:
    5
    Код (Text):
    1. <?php query_posts( array( 'cat' => 3, 'paged' => get_query_var('paged') ) ); ?>
    2.  
    3. <?php $tmp = 1;
    4.  while (have_posts()) : the_post();
    5.  
    6.  
    7.     switch ($tmp) {
    8.         case 1:
    9.             echo "big left block<br>";
    10.             break;
    11.  
    12.         case 2:
    13.         case 3:
    14.             echo "small right blocks<br>";
    15.             break;
    16.  
    17.         case 4:
    18.         case 5:
    19.             echo "small left blocks<br>";
    20.             break;
    21.  
    22.         case 6:
    23.             echo "right big block<br>";
    24.             break;
    25.  
    26.     }
    27.  
    28.     $tmp++;
    29. ?>
    Дошел до этого, теперь по непонятному. 1) Как вставить html код в "" говорят неграмотно, надо выносить из php. 2) Сейчас статьи выводятся независимо от добавленного кода, просто сверху приписывается надпись big left block и т.п.
     
  20. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Пример 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:
    1. <?php query_posts( array( 'cat' => 3, 'paged' => get_query_var('paged') ) ); ?>
    2. <?php $tmp = 1;
    3. while (have_posts()) {
    4. the_post(); // это печатает весь пост? надо научить разные блоки печатать
    5.     switch ($tmp) {
    6.         case 1:
    7.             ?>
    8.                       тут выводи пост, который отвечает за большой квадрат, big left block, вывод функций или переменных: <?=$tmp?><br>
    9.            <?php
    10.             break;
    11.         case 2:
    12.         case 3:
    13.             ?>
    14.            тут за меленькие правые, small right blocks<br>можно ещё так <?php if($tmp > 2) { ?> tmp больше чем два!!! <?=$tmp?> - это tmp <?php } ?><br>
    15.            <?php
    16.             break;
    17.         case 4:
    18.         case 5:
    19.             echo "тут за левые и убери echo если надо и сделай как выше, small left blocks<br>";
    20.             break;
    21.         case 6:
    22.             echo "ту угадал что делать? right big block<br>";
    23.             break;
    24.     }
    25.     $tmp++;
    26. }
    27. ?>
     
    metadon и SColhin нравится это.
  21. SColhin

    SColhin Активный пользователь

    С нами с:
    9 июн 2016
    Сообщения:
    19
    Симпатии:
    5
    @denis01 спасибо почитал, собственно и решен вопрос. Очень помог.