We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 11307
    • 136 Posts
    Здравствуйте.

    Подскажите, пожалуйста, как мне быть.

    Имеется сниппет такого вида:
    <?php
    $path = "assets/gallery/$folder/";
    
    if(!isset($folder)) return; // no folder? quit.
    $slides = array();
    if ($dh = @opendir($path)) {
      while(($file = readdir($dh)) !== false) {
         if ( !preg_match('/\.thumb*/',$file) && preg_match('@.png$|.gif$|.jpg$@', $file) && $file != '.' && $file != '..' ) {
          $slides[] = $path.$file;
        }
      }           
    }
    
    $num = count($slides);
    $last = $num-1;
    for ( $i=0; $i<=($count-1); $i++) {
    echo '<img src="'.$slides[$i].' " alt="" width="'.$width.'" height="'.$height.'"/>';}
    ?>

    Вызов такой:
    [!Snippet?&folder=`[*alias*]`&count=`4` &width=`100` &height=`100`!]



    Так вот проблема в том, что как только я выставляю шаблон не "blank" вывод картинки прекращается. Отображается лишь <img src=" " alt="" width="100" height="100">

    Проблема исчезает лишь при отключении friendly URL.

    И второй вопрос - что прописать в сниппете, чтобы картинки брались не первые n, а рандомно в нужном количестве.

    Спасибо.
      • 11307
      • 136 Posts
      внимание, ответ
      <?php
      $path = "assets/gallery/$folder/";
      
      $slides = array();
      if ($dh = @opendir($path)) {
      while(($file = readdir($dh)) !== false) {
         if ( !preg_match('/\.thumb*/',$file) && preg_match('@.png$|.gif$|.jpg$@', $file) && $file != '.' && $file != '..' ) {
          $slides[] = $path.$file;
        }
      }
      }
      
      if($count >= count($slides)) $count = count($slides);
      
      for($i = 0; $i < $count; $i++){
         $rand = rand(0, count($slides)-1); 
         echo '<img src="'.$slides[$rand].'" width="'.$width.'" height="'.$height.'" />';
      }
      ?>


      вызов [!Snippet?&folder=`riga`&count=`4` &width=`100` &height=`100`!]

      Единственное, что картинки могут повторяться.
      Если у кого нить есть идеи как от этого уйти - велкам.
        • 785
        • 2,113 Posts
        Используйте array_rand http://docs.php.net/manual/ru/function.array-rand.php
          Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
          Статьи о MODx, регулярно новые публикации
          • 11307
          • 136 Posts
          Спасибо за подсказку.

          Тогда вот так:
          <?php
          $path = "assets/gallery/$folder/";
          $slides = array();
          if ($dh = @opendir($path)) {
          while(($file = readdir($dh)) !== false) {
             if ( !preg_match('/\.thumb*/',$file) && preg_match('@.png$|.gif$|.jpg$@', $file) && $file != '.' && $file != '..' ) {
              $slides[] = $path.$file;
            }
          }
          }
          if($count >= count($slides)) $count = count($slides);
          for($i = 1; $i < $count+1; $i++){
             $rand = array_rand($slides);
             echo '<img src="'.$slides[$rand].'" width="'.$width.'" height="'.$height.'" />';
          }
          ?>

            • 785
            • 2,113 Posts
            Надо не в цикле генерировать случайные числа, а один раз с помощью array_rand сгенерировать массив из случайных значений заданного размера, а потом с помощью foreach перебрать все его значения и вывести в нужном виде. Так не будет повторов.
              Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
              Статьи о MODx, регулярно новые публикации
              • 11307
              • 136 Posts
              что я делаю не так?(
              <?php
              $path = "assets/gallery/$folder/";
              $slides = array();
              if ($dh = @opendir($path)) {
              while(($file = readdir($dh)) !== false) {
                 if ( !preg_match('/\.thumb*/',$file) && preg_match('@.png$|.gif$|.jpg$@', $file) && $file != '.' && $file != '..' ) {
                  $slides[] = $path.$file;
                }
              }
              }
              if($count >= count($slides)) $count = count($slides);
              $rand = array_rand($slides);
              
              
              foreach ($rand as $v) {
                echo '<img src="'.$slides[$v].'" width="'.$width.'" height="'.$height.'" />';
              }
              ?>
                • 785
                • 2,113 Posts
                $rand = array_rand($slides, $count);
                  Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
                  Статьи о MODx, регулярно новые публикации
                  • 11307
                  • 136 Posts
                  вроде заработало так, как надо. спасибо