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: 3553
  • 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: 3553
  • 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 735 korisnika na forumu :: 44 registrovanih, 5 sakrivenih i 686 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 2967 - dana 31 Okt 2019 06:37

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: Adalbert Meranich, Apok, Arhiv, darkstar101, doktor1964, Dusan Medojevic, filiplukac1337, Filodendron, Gama, greenmachine, kaptain, Kubovac, KUZMAR, lav23, majorgaspar, MarKhan, Mercury2, Metanoja, mgaji21, MikeHammer, moonshine, MORAVA1, NenadG, novidan, ostoja2, Perko91, pjaka2001, powSrb, sakota79, Skijavoneska, Skywhaler, Snorks, Srna, Stija zmija, Toni, Trpe Grozni, uhogrlonos, VJ, Vojvoda S., yufighter, Zikka, Zmaj 99, zoidbergs, 1872