Problem sa loop

1

Problem sa loop

offline
  • Pridružio: 29 Sep 2012
  • Poruke: 1

Pozdrav,

pokušavao sam da rešim petlju koja mi daje Invalid argument supplied for foreach ali bez uspeha.

Stranica na kojoj mi to izbacuje , prikazuje kategorije portfolia bez greške s tim što izleću ova upozorenja na 2 mesta pa ako može neko da pogleda.

Warning: Invalid argument supplied for foreach() in C:\wamp\www\webdynamics\wp-content\themes\vagenta\portfolio.php on line 20

Warning: Invalid argument supplied for foreach() in C:\wamp\www\webdynamics\wp-content\themes\vagenta\portfolio.php on line 42

Evo ga ceo kod stranice.

<?php get_header(); ?> <div class="container">   <div class="row">     <div class="twelve columns">       <div class="mod modSectionHeader">         <h3 class="text-center">           <?php the_title(); ?>         </h3>       </div>       <div class="mod modGallery <?php echo $columns_count_class; ?>">         <ul class="nav filter">           <?php             // $works = blahlab_latest_posts_of_type('portfolio', -1, 'order');             $works = query_posts("posts_per_page=-1&post_type=portfolio&orderby=menu_order&order=asc");             // blahlab_dump($items);             // $terms = array();             $filters = array();             foreach($works as $work) {               $terms = get_the_terms($work->ID, 'portfolio_category');               foreach($terms as $term) {                 if(!in_array($term->name, $filters)) {                   $filters[] = $term->name;                 }               }             }             sort($filters);           ?>           <li id="all"><?php echo blahlab_link_to(__('All', 'blahlab'), null, array('class' => 'current')) ?></li>           <?php foreach($filters as $filter): ?>             <li><?php echo blahlab_link_to($filter) ?></li>           <?php endforeach; ?>         </ul>         <ul class="works">           <?php             $i = 1;             $cols = $columns_count_class == 'four-up' ? 4 : 3;           ?>           <?php foreach($works as $work): ?>             <?php               $terms = get_the_terms($work->ID, 'portfolio_category');               $classnames = array();               foreach($terms as $term) {                 $classnames[] = $term->name;               }               if($i % $cols == 0) {                 $classnames[] = 'last';               }               $i++;             ?>             <li class="<?php echo implode($classnames, ' '); ?>">               <div class="image-wrapper">                 <a class="image" href="<?php echo get_permalink($work); ?>">                   <span><?php echo __('View Project', 'blahlab') ?></span>                   <?php echo get_the_post_thumbnail($work->ID, 'portfolio') ?>                 </a>               </div>               <p class="text-center"><?php echo get_the_title($work->ID) ?></p>             </li>           <?php endforeach; ?>         </ul>       </div>     </div>   </div> </div> <?php get_footer(); ?>

Hvala unapred. Zagrljaj



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Pridružio: 16 Jan 2010
  • Poruke: 241
  • Gde živiš: Zemun

Moji predlozi:

1. definišti $works kao niz;
2. proveri da li funkcija query_posts vraća neke vrednosti.



offline
  • PHP programer
  • Pridružio: 26 Okt 2007
  • Poruke: 1063
  • Gde živiš: u Apache

Ćao Cvrle , gfactory ovde ( slučajno se ulogovah sa ženinog profila i napisah temu Smile )

query_post daje kategorije portfolija, npr dizajn, programiranje ,seo itd.

Stavio sam iznad query-ja $works = array();
ali to ne rešava stvar.

offline
  • Pridružio: 16 Jan 2010
  • Poruke: 241
  • Gde živiš: Zemun

Ovako mi ništa drugo ne pada na pamet osim toga, da $query ili je prazan ili nije niz. Izvini što ja ovako ispitujem, a da li si print-ao tu varijablu i video šta ona ima? Probaj pre svake petlje da proveriš da li je u pitanju niz, pa ako jeste, da uđe u tu petlju. Ako se u nekom od slučajeva desi da nije niz, onda ti neće prikazivati grešku.

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3618
  • Gde živiš: 127.0.0.1

Ususkaj ceo

foreach($works as $work) { ... }

u:

if ($works) { ... }

tako da bude:

if ($works) { foreach($works as $work) { ... } }

to bi trebalo da resi problem.

offline
  • PHP programer
  • Pridružio: 26 Okt 2007
  • Poruke: 1063
  • Gde živiš: u Apache

Bravo Rasti i hvala puno,

jedna greška je uklonjena sa ovim i to ona druga koja se ponavlja...

za prvu grešku sam stavio isto kao što si mi napisao, ali za nju ne radi.. stavio sam ovako

  $works = query_posts("posts_per_page=-1&post_type=portfolio&orderby=menu_order&order=asc");             // blahlab_dump($items);             //$terms = array();             $filters = array();             if ($works) { foreach($works as $work) {               $terms = get_the_terms($work->ID, 'portfolio_category');               foreach($terms as $term) {                 if(!in_array($term->name, $filters)) {                   $filters[] = $term->name;                 }               }             }          }             sort($filters);

offline
  • PHP developer
  • Pridružio: 22 Mar 2006
  • Poruke: 3618
  • Gde živiš: 127.0.0.1

Sad pogledah man-page za query_posts() - ta funkcija ne vraca nista (ili eventualno true/false), pa se i ne koristi tako kao sto je ti koristis. Probaj ovako:

<?php // The Query query_posts( $args ); // The Loop while ( have_posts() ) : the_post();    echo '<li>';    the_title();    echo '</li>'; endwhile; // Reset Query wp_reset_query(); ?>

offline
  • PHP programer
  • Pridružio: 26 Okt 2007
  • Poruke: 1063
  • Gde živiš: u Apache

Hm, probao sam i tako, mada nisam siguran da sam najbolje ugnezdio, dobijao samo s tim i liste ali ne linkovane, jer kategorije su linkovane naravno.

probao sam i ovako npr
$count = count($terms);  if ( $count > 0 ){      echo "<ul>";      foreach ( $terms as $term ) {        echo "<li>" . $term->name . "</li>";              }      echo "</ul>";  }

da ironija bude veća, kad vratim stejtment if($works) opet mi u oba loop-a izbacuje istu grešku, kao na početku.. tup tup smešak

Imaš na početku ceo kod stranice, pa ako te ne mrzi i kad stigneš probaj da ugnezdiš gde treba.

Hvala. Zagrljaj

offline
  • arnage 
  • Novi MyCity građanin
  • Pridružio: 13 Feb 2013
  • Poruke: 16

Mozes li da pastujes tu funkciju query_posts()?

Sad, ne znam da li samo smeta to sto se vidi upozorenje ili si kao ja da cackas dok sve nije validno, a u slucaju ovog prvog dodaj na vrh strane
error_reporting(0);

offline
  • PHP programer
  • Pridružio: 26 Okt 2007
  • Poruke: 1063
  • Gde živiš: u Apache

Napisano: 13 Feb 2013 23:29

@arnage

Ova wp tema je urađena u framework-u i query_posts se koristi za mnoge stvari.

Našao sam funkciju

/**     * Set up the Loop based on the query variables.     *     * @uses WP::$query_vars     * @since 2.0.0     */    function query_posts() {       global $wp_the_query;       $this->build_query_string();       $wp_the_query->query($this->query_vars);     }

Što se tiče upozorenja, nije problem da ga gledaš u lokalu, al je nedopustivo da stoji na mom ili bilo čijem sajtu, ako me razumeš. Wink

Dopuna: 13 Feb 2013 23:36

Stavio sam error 0 , pošto sam se jako mnogo zezao s tim i oduzeo vreme i sebi i vama kolegama.

Bitno je da sve radi, ostaće ovako.

Hvala i tebi arnage Zagrljaj

Ko je trenutno na forumu
 

Ukupno su 575 korisnika na forumu :: 28 registrovanih, 3 sakrivenih i 544 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3028 - dana 22 Nov 2019 07:47

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: A.R.Chafee.Jr., Apok, ArmyBoss, d bos, Dragan1998, HDMI, KlinkaPalacinka, kybonacci, Lieutenant, Lucije Kvint, MarKhan, Mercury2, Milos ZA, Polemarchoi, raketaš, Recce, sabros, shone34, Sirius, sosko2, stug, theNedjeljko, vasa.93, VP3987, W123, Wisdomseeker, wizzardone, Živković