За последние 24 часа нас посетили 17499 программистов и 1711 роботов. Сейчас ищут 1653 программиста ...

Таблица WordPress и циклы

Тема в разделе "PHP для новичков", создана пользователем westsergius, 13 фев 2018.

  1. westsergius

    westsergius Новичок

    С нами с:
    24 янв 2018
    Сообщения:
    13
    Симпатии:
    1
    Доброго вам дня ! Ситуация следующая есть задача создать таблицу вывода новостей на сайте

    три строчки по три столбца

    проблема заключается в том что движок WP выводит новости на сайте пока они есть соответственно используется цикл
    PHP:
    1. <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    далее идет формирование поста
    PHP:
    1.  <table >
    2.      <tr>
    3.        <td><div class="post"><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(array(100,150)); ?></a></div></td>
    4.      </tr>
    5.      <tr>
    6.        <td><h2 class="post"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2></td>
    7.      </tr>
    8.      <tr>
    9.        <td><div class="readmore"><a href="<?php the_permalink(); ?>">Читать далее</a></div></td>
    10.      </tr>
    11.       </table>
    12. <?php endwhile; ?>
    13.  
    14.     <?php else: ?>
    15.  
    16.     <?php endif; ?>
    это выводится один пост и цикл повторяется
    нашел пример создания таблиц в php
    PHP:
    1. <?php
    2. $rows = 20; // количество строк, tr
    3. $cols = 20; // количество столбцов, td
    4. echo '<table border="1">';
    5. for ($tr=1; $tr<=$rows; $tr++){ // в этом цикле счётчик $tr
    6.     // следит за количеством строк и всегда равен текущему номеру строки.
    7.     // То есть в начале $tr=1, так как в начале у нас 1 строка, затем
    8.     // каждый раз прибавляем единицу, пока не дойдём до заданного количества
    9.     // $rows.
    10.     echo '<tr>';
    11.     for ($td=1; $td<=$cols; $td++){ // в этом цикле счётчик $td аналогичен
    12.                                     // счётчику $tr.
    13.         echo '<td>'. $tr*$td .'</td>';
    14.     }
    15.     echo '</tr>';
    16. }
    17. echo '</table>';
    18. ?>
    но цикл в цикле почему-то ругается

    подскажите как это можно уложить в еще одну таблицу 3х3

    [​IMG] для наглядности

    кто не знаком с особенностями уточню в WP можно указать сколько раз повторять цикл для одной странички , поэтому если указать таблицу 3х3 то выводится будет последние 9 новостей а на другой странице цикл повторится уже для других новостей
     
    #1 westsergius, 13 фев 2018
    Последнее редактирование: 13 фев 2018
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @westsergius, для начала можно убрать if (have_posts()): и его endif;
    Затем можно добавить счетчик... $i=0 - перед while. А в цикле, например:
    PHP:
    1. if($i++ % 3 === 0) {/* добавляем разделитель */}
    Конкретнее, pls...
     
  3. westsergius

    westsergius Новичок

    С нами с:
    24 янв 2018
    Сообщения:
    13
    Симпатии:
    1
    --- Добавлено ---
    может конечно и я с ошибками написал, но я только новичек не пинайте
    --- Добавлено ---
    может конечно и я с ошибками написал, но я только новичек не пинайте
    Код (Text):
    1. <div class="container">
    2.     <!---главная таблица-->
    3.     <div class="content">
    4.     <table >
    5.    <? $rows = 3; // количество строк, tr
    6.       $cols = 3; // количество столбцов, td
    7. for ($tr=1; $tr<=$rows; $tr++){
    8.     echo '<tr>';
    9.     for ($td=1; $td<=$cols; $td++){
    10.     ?>
    11.      
    12. <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    13.  
    14.  
    15.     <? echo '<td>'?>
    16.    
    17.     <table >
    18.      <tr>
    19.        <td><div class="post"><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(array(100,150)); ?></a></div></td>
    20.      </tr>
    21.      <tr>
    22.        <td><h2 class="post"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2></td>
    23.      </tr>
    24.      <tr>
    25.        <td><div class="readmore"><a href="<?php the_permalink(); ?>">Читать далее</a></div></td>
    26.      </tr>
    27.       </table>
    28.     <?$tr*$td .'</td>';
    29.     }?>
     
  4. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @westsergius, ругается на то, что не закрыты while и if.
    Ни у для внешнего for() закрывающей скобки не хватает.
    Это с точки зрения синтаксиса.
    А вот с точки зрения логики...
    Имеющийся вариант сколько "новостей" выводит для страницы?
    Девять?
    Если так, то без всяких внешних циклов можете добавить несколько (или одну) переменных-счетчиков для отслеживания количества выведенных новостей и добавления соответствующей разметки.
     
  5. westsergius

    westsergius Новичок

    С нами с:
    24 янв 2018
    Сообщения:
    13
    Симпатии:
    1
    он как бы сам считет WP . там где-то внутри это считается и выводится, так то конечно я просто 9 раз бы прописал вывод новости и все
    но вот именно загвоздка в том что надо чтоб :

    таблица сначала открылась
    потом пошел цикл формирования строк
    далее внутри него уже цикл формирования столбцов
    внутри которого формируется вывод новости
    затем закрывается цикл столбцов
    затем строк
    и закрылась таблица
    --- Добавлено ---
    короче на странице нигде не указывается кол-во выводимых новостей . это указывается в движке в админ панели . как я понял скрипт смотрит какая страница открыта и выводит для нее содиржимое согласно заданным ранее параметрам
     
  6. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @westsergius, вот простенький пример, где после 3-й новости (тут их 4 запрашивается) воводится <hr>:
    PHP:
    1.         <div class="sidebar">
    2.             <?php query_posts('cat=5&showposts=4'); ?>
    3.             <?php
    4. //            if (have_posts()):
    5.             $i = 0;
    6.                 while (have_posts()) : the_post();
    7.                 ?>
    8.                     <ul><li><a <?php if ($_SERVER['REQUEST_URI']==wp_make_link_relative(get_permalink())) { echo '';}
    9.                      else { echo 'href="'.wp_make_link_relative(get_permalink()).'"';} ?>><?php the_title(); ?></a></li></ul>
    10.                 <?php
    11.                 if(++$i % 3 === 0) {
    12.                     echo '<hr>';
    13.                 }
    14.                 endwhile;
    15. //            endif;
    16.             ?>
    17.                 <?php wp_reset_query(); ?>
    18.             <div class="arch-link">
    19.                 <a href="/news/"><i class="fa fa-arrow-circle-right"></i>Архив новостей</a>
    20.             </div>
    21.         </div>  
    --- Добавлено ---
    PS: То, что каждая новость выводится отдельным списком из одного элемента - это местные заморочки :)
     
  7. westsergius

    westsergius Новичок

    С нами с:
    24 янв 2018
    Сообщения:
    13
    Симпатии:
    1
    ща посмотрим, но это сайтбар
     
  8. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    А есть разница в том, где формировать требуемую для вывода выловленных функцией query_posts('cat=5&showposts=4'); новостей html+css разметку?
    --- Добавлено ---
    Нарисуйте, например, простой html код для вывода текста в требуемом виде. Посмотрите, что из него надо будет разместить до цикла (начало таблицы), что общего в выводе каждой новости (ячейка таблицы), какие значения будут принимать переменные-счетчики (та-же $i из примера) при выводе очередной новости (когда надо будет начинать строку, с завершающим строку тегом, кстати, не нужно заморачиваться - он не обязателен)...
     
  9. westsergius

    westsergius Новичок

    С нами с:
    24 янв 2018
    Сообщения:
    13
    Симпатии:
    1
    Люди кто сделает такой вывод как на картинке дам 500 рублей
     
  10. karmay

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

    С нами с:
    9 ноя 2017
    Сообщения:
    180
    Симпатии:
    18
    Адрес:
    Н.Новгород
    так то все на правильном пути, но надо не в таблицу заворачивать, а в div, а уже их на странице распределять, и не больше 9-ти например, и обернуть в div поверх цикла, и будет все бодро. Если во вторник будет актуально, пишите в личку.
     
  11. westsergius

    westsergius Новичок

    С нами с:
    24 янв 2018
    Сообщения:
    13
    Симпатии:
    1
    Тему можно закрывать , решилось все с помощью css дополнительно добавил адаптивность под телефоны-планшеты и да просто дивная верстка без таблиц