За последние 24 часа нас посетили 21779 программистов и 1690 роботов. Сейчас ищут 1898 программистов ...

вывод материалов из одной категории через цикл foreach

Тема в разделе "PHP и базы данных", создана пользователем naruk, 3 май 2018.

  1. naruk

    naruk Новичок

    С нами с:
    26 фев 2018
    Сообщения:
    6
    Симпатии:
    0
    Добрый день, реализован метод для вывода материалов из базы данных с помощью цикла foreаch в таком ввиде
    PHP:
    1. <?php foreach ( $results['articles'] as $article ) { ?>
    2.           <div class="post-item wow" data-animation="fadeInUp" data-animation-delay="300">
    3.             <h2 class="wow fadeInUp"><a href="news.php.?action=viewArticle&amp;articleId=<?php echo $article->id?>">
    4.             <?php echo htmlspecialchars( $article->title )?></a></h2>
    5.               <div class="post wow fadeInUp">
    6.               <?php if ( $imagePath = $article->getImagePath( IMG_TYPE_FULLSIZE ) ) { ?>
    7.                 <a href=".?action=viewArticle&amp;articleId=<?php echo $article->id?>">
    8.                   <img src="<?php echo $imagePath?>" alt="" class="img-responsive news_blog"/></a>
    9.                 <?php } ?>
    10.                 <div class="post-content">
    11.                 <?php echo htmlspecialchars( $article->summary )?>
    12.                   <div class="posted-date">
    13.                   <?php echo date('j F Y', $article->publicationDate)?>
    14.                   </div>
    15.               </div>
    16.             </div>
    17.           </div>
    18.         <?php } ?>
    При попытке добавления цикла вывода материалов только из одной категории, цикл foreach перестает работать, данные не выводятся
    PHP:
    1. <?php if ( $article->categoryId = '1') { ?>
    Подскажите как добавить вывод материалов только из одной категории?
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.860
    Симпатии:
    749
    Адрес:
    Татарстан
    Сравнение в php это ==, а не =
     
  3. naruk

    naruk Новичок

    С нами с:
    26 фев 2018
    Сообщения:
    6
    Симпатии:
    0
    исправил но результат точно такой же
    PHP:
    1. <?php if ( $article->categoryId == '1') { ?>
     
  4. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.840
    Симпатии:
    652
    В запросе фильтрацию делайте, т.е. добавляйте условие в запрос.
    --- Добавлено ---
    А вместо присоединения таблицы категорий к статьям, если им нужны соотв. метаданные, сделайте предварительную выборку запрошенной категории и повтыкайте фактические данные в основной запрос, например:
    Код (Text):
    1. SELECT `articles`.*, "{$category->name}" `cat_name` ...
    Это чтобы результат был полностью эквивалентен выборке без фильтрации.

    P.S. Если кавычки в именах категорий не кодировались, проэкранируйте имя, прежде чем втыкать его в запрос.
    --- Добавлено ---
    P.P.S. Вот тут я делал вывод примерных текстов запросов, чтобы было понятнее. Только там двухуровневая фильтрация. У вас проще.
    --- Добавлено ---
    В полях `id` там слаги, поэтому с ними проделывается такая же работа, как и с именами. Не обращайте на это внимания.
     
  5. naruk

    naruk Новичок

    С нами с:
    26 фев 2018
    Сообщения:
    6
    Симпатии:
    0
    наверное делаю не так как вы пишите, написал так
    PHP:
    1.     <?php $articles = array("SELECT articles from cms where categoryId = 1");
    2.       <?php foreach ( $results['articles'] as $article ) { ?>
    3.         <?php if ( $article->categoryId == '1') { ?>
    4.           <div class="post-item wow" data-animation="fadeInUp" data-animation-delay="300">
    5.             <h2 class="wow fadeInUp"><a href="news.php.?action=viewArticle&amp;articleId=<?php echo $article->id?>">
    6.             <?php echo htmlspecialchars( $article->title )?></a></h2>
    7.               <div class="post wow fadeInUp">
    8.               <?php if ( $imagePath = $article->getImagePath( IMG_TYPE_FULLSIZE ) ) { ?>
    9.                 <a href="news.php.?action=viewArticle&amp;articleId=<?php echo $article->id?>">
    10.                   <img src="<?php echo $imagePath?>" alt="" class="img-responsive news_blog"/></a>
    11.                 <?php } ?>
    12.                 <div class="post-content">
    13.                 <?php echo htmlspecialchars( $article->summary )?>
    14.                   <div class="posted-date">
    15.                   <?php echo date('j F Y', $article->publicationDate)?>
    16.                   </div>
    17.               </div>
    18.             </div>
    19.           </div>
    20.           <?php } ?>
    21.         <?php } ?>
    22.         ?>
    но выходит ошибка
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.860
    Симпатии:
    749
    Адрес:
    Татарстан
    в том синтаксисе что используете - нельзя создавать вложенные <?php не в одной строке
    кароче я бы сделал лучше как-то так
    PHP:
    1.    
    2. <?php
    3. $articles = array("SELECT articles from cms where categoryId = 1");
    4. foreach ( $results['articles'] as $article ) {
    5.     echo '
    6.          <div class="post-item wow" data-animation="fadeInUp" data-animation-delay="300">
    7.            <h2 class="wow fadeInUp"><a href="news.php.?action=viewArticle&amp;articleId='.$article->id.'">'.htmlspecialchars( $article->title ).'</a>/h2>
    8.              <div class="post wow fadeInUp">';
    9.               if ( $imagePath = $article->getImagePath( IMG_TYPE_FULLSIZE ) ) {
    10.                 echo '<a href="news.php.?action=viewArticle&amp;articleId='.$article->id.'">
    11.                  <img src="'.$imagePath.'" alt="" class="img-responsive news_blog"/></a>';
    12.                }
    13.                echo '<div class="post-content">'.htmlspecialchars( $article->summary ).'
    14.                  <div class="posted-date">
    15.                  '.date('j F Y', $article->publicationDate).'
    16.                  </div>
    17.              </div>
    18.            </div>
    19.          </div>';
    20. }
    21. ?>
     
  7. naruk

    naruk Новичок

    С нами с:
    26 фев 2018
    Сообщения:
    6
    Симпатии:
    0
    подправил и исправил ошибки, но все равно не работает
    PHP:
    1.     <?php
    2.       $articles = array("SELECT * from articles where categoryId = 1");
    3.         foreach ( $results['articles'] as $article ) {
    4.           echo '
    5.         <div class="post-item wow" data-animation="fadeInUp" data-animation-delay="300">
    6.           <h2 class="wow fadeInUp">
    7.           <a href="news.php.?action=viewArticle&amp;articleId='.$article->id.'">'.htmlspecialchars( $article->title ).'</a></h2>
    8.             <div class="post wow fadeInUp">';
    9.               if ( $imagePath = $article->getImagePath( IMG_TYPE_FULLSIZE ) ) {
    10.                 echo '<a href="news.php.?action=viewArticle&amp;articleId='.$article->id.'">
    11.                 <img src="'.$imagePath.'" alt="" class="img-responsive news_blog"/></a>';
    12.                }
    13.                echo '<div class="post-content">'.htmlspecialchars( $article->summary ).'
    14.                 <div class="posted-date">
    15.                 '.date('j F Y', $article->publicationDate).'
    16.                 </div>
    17.             </div>
    18.           </div>
    19.         </div>';
    20. }
    21. ?>
     
  8. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.860
    Симпатии:
    749
    Адрес:
    Татарстан
    телепатов нема - что именно не работает? если есть ошибки то их текст
     
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.840
    Симпатии:
    652
    И что делает эта команда? Присваивает какой-то переменной массив из одной строки? :) Вы вообще РНР знаете? Ошибка вызвана тем, что не закрыли php-вставку с этой командой, но суть от этого не меняется.

    Где ваш основной запрос для выборки без фильтрации? Весь смысл был в том, чтобы сделать модифицируемый запрос, используемый как для выборки без фильтрации, так и с фильтрацией, и чтобы в обоих случаях можно было использовать одну и ту же вьюшку.
    --- Добавлено ---
    P.S. У функции выборки списка добавьте параметр $categoryId (0 – без фильтрации, иначе с фильтрацией). Можете добавить этот параметр и к имеющемуся экшину, указав 0 в качестве дефолтного значения.
     
  10. naruk

    naruk Новичок

    С нами с:
    26 фев 2018
    Сообщения:
    6
    Симпатии:
    0
    ошибок нет, материалы выводятся все подряд
     
  11. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.860
    Симпатии:
    749
    Адрес:
    Татарстан
    Значит в базе они так заведены
     
  12. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.840
    Симпатии:
    652
    Это злой рок, забейте.