2013-04-10 53 views
0

我正在创建一个joomla模块,它拉入一篇文章,然后从文件夹中分配一个图像(没有特定的顺序)。PHP获取文件夹中的图像返回相同的图像

但它一直返回相同的图像:/ ...其他一切正常完美我只需要它从每个文章的文件夹中抓取不同的图像。

这里的mod_slider.php(包括仅要领):

$a = explode(",", $params->get('id')); 

foreach ($a as $k => $val) { 
    $args = $val; 
    $item[] = ModArticleSlider::getArticles($args,$params); 
} 

和helper.php(包括整个类):

class ModArticleSlider { 
    public static function getArticles($args,$params){ 
     $db = JFactory::getDBO(); 
     $id = $args; 
     if($id > 0){ 

      $query = "select * "; 
      $query .= "FROM #__content WHERE id =".$id." AND state=1 " ; 

      //echo $query; 
      $db->setQuery($query); 
      $item = $db->loadObject(); 
     } 


     $folder = $params->get('folder'); 

     if(JString::strpos($folder, JURI::base()) === 0) 
     { 
      $folder = str_replace(JURI::base(), '', $folder); 
     } 

     if(JString::strpos($folder, JPATH_SITE) === 0) 
     { 
      $folder = str_replace(JPATH_BASE, '', $folder); 
     } 

     $folder = str_replace('\\', '/', $folder); 

     $dir = JPATH_BASE.'/'.$folder; 
     $files = array(); 

     if(is_dir($dir)) 
     { 
      if($handle = opendir($dir)) 
      { 
       while(($file = readdir($handle)) !== false) 
       { 
        if($file != '.' AND $file != '..' AND $file != 'index.html') 
        { 
         $files[] = $file; 
        } 
       } 
      } 

      closedir($handle); 

      $types = array_map('trim', explode(',', $params->get('type'))); 
      $images = array(); 

      foreach($files as $img){ 

       if(!is_dir($dir.'/'.$img)) 
       { 
        foreach($types as $type) 
        { 
         $muster = '@'.$type.'[email protected]'; 

         if(preg_match($muster, $img)) 
         { 
          $item->name = $img; 
          $item->folder = str_replace('\\', '/', $folder); 
         } 
        } 
       } 
      } 
     } 
     return $item; 
    } 

} 

,然后在index.php(仅包括要领):

<?php foreach ($item as $items):?> 
<img src="<?php echo $items->folder.'/'.$items->name ?>" /> 
<?php endforeach; ?> 

任何帮助非常感谢。

+0

您将数字分配给变量'$ a'的方式是错误的。 您应该为该变量分配一个数组,例如'$ a = array(1,2,3,4);'。 试试看看它是否有效。 – Shef 2013-04-10 20:37:40

+0

完成任何调试?检查了参数是什么?检查了您为路径生成的内容?检查你在那些生成的路径中发现了什么? – 2013-04-10 20:38:21

+0

我真的还是个初学者..我一直在努力做我能做的。 。 。 – 2013-04-10 20:40:00

回答

1

它看起来像你实际上没有选择一个随机图像。我看的代码本节:通过所有文件

 $types = array_map('trim', explode(',', $params->get('type'))); 
     $images = array(); 

     foreach($files as $img){ 

      if(!is_dir($dir.'/'.$img)) 
      { 
       foreach($types as $type) 
       { 
        $muster = '@'.$type.'[email protected]'; 

        if(preg_match($muster, $img)) 
        { 
         $item->name = $img; 
         $item->folder = str_replace('\\', '/', $folder); 
        } 
       } 
      } 
     } 

你循环,但如果匹配,你只是在彼此赋予它们。每次都会覆盖$item->name$item->folder。我也没有看到你实际上在随机化文件列表,所以你不能真正期望一个随机图像。 (我假设你可能会使用$images来使随机化发生或获得所有匹配,所以你可能会删除它。)我会在$ files上添加一个shuffle来随机化文件列表,然后打破循环,以避免不必要地处理整个列表:

 $types = array_map('trim', explode(',', $params->get('type'))); 
     shuffle($files); 

     foreach($files as $img){ 

      if(!is_dir($dir.'/'.$img)) 
      { 
       foreach($types as $type) 
       { 
        $muster = '@'.$type.'[email protected]'; 

        if(preg_match($muster, $img)) 
        { 
         $item->name = $img; 
         $item->folder = str_replace('\\', '/', $folder); 
         break 2; 
        } 
       } 
      } 
     } 
+0

嘿似乎工作很好..谢谢..只是一件事..它将相同的图像分配给一些文章...任何修补程序..以便它只显示图像一次? – 2013-04-11 06:22:34

+1

要处理这种情况,您需要将'$ files'设置为静态变量,只需构建一次列表,然后从此继续使用它(并且只是随机化一次),并且可能会在设置时将其取消设置匹配数组,以便在下次运行时不匹配。 – 2013-04-12 04:47:34

相关问题