Вход • Регистрация

Как создать 3 колонки в каталоге товаров

  • 20 декабря 2010 г.
  • Помогите разобраться как вывести список товаров в 3 или больше колонки?
    • 20 декабря 2010 г.
    • Это ж первый курс программирования в институте :)
      Перед циклом вывода товаров ставите
      Код
      echo "<table><tr><td>";
      $nnn=1;


      в цикле ставите после вывода товара:
      Код
      if ($nnn%3==0) echo "</td></tr><tr><td>"; else echo "</td><td>";
      $nnn++;


      После цикла ставите
      Код
      echo "</td></tr></table>";


      Поставите if ($nnn%2==0) - будет две колонки. if ($nnn%4==0) - четыре колонки. И т.д.
      • 28 февраля 2014 г.
      • http://kosadaka.net/g3555173-kosadaka
        Если посмотреть код, то здесь колонки формируются списком. Этот вариант чем отличается от таблицы? Мне кажется, так даже легче?
        • 02 марта 2014 г. , редакция: 02 марта 2014 г.
        • если наполнение блока товара делать одинаковым, то лучше делать блокам, там просто делем фиксированный размер блока и ставим ему flat:left, а для последнейго делаем к примеру ul.shop_list li:nth-child(3n+3) {margin-right:0}

          а если наоплнение разное по высоте, то табличка будет лучше. ну либо если блоками, то после третьего надо будет ставить
          <div style="clear:both"></div>
  • 20 декабря 2010 г.
  • ну у меня на первом курсе было "растениеводство" )))
    можно табличками, а можно в базовом шаблоне классу назначить .shop{float; left}

    Кирилл, чтоб сделать как предложил Виталий, надо залезть в папку modules/shop а там найти файл shop.view.php и отредактировать его.
    Если шаблон базовый, то можно попробовать отыскать класс, который отвечает за вывод одной позиции и назначить ему float: left. Второмы способом удобно пользоваться при "резиновой верстке"

    • 21 декабря 2010 г.
    • Пётр, только не .shop{float; left} а .shop{float: left}
      Так тоже можно, но это будет не "три колонки", а две или пять, в зависимости от разрешения экрана
    • 21 декабря 2010 г.
    • Петр спасибо через CSS получилось. Но с методом Виталия я так и не разобрался, если можно объяснить подробней.
      • 22 декабря 2010 г.
      • Вы файл приложите shop.view.php
        Я вам его поправлю и с комментариями внутри выложу обратно.
        • 22 декабря 2010 г.
        • Ок. он стандартный из пакета установки
          • 27 декабря 2010 г. , редакция: 27 декабря 2010 г.
          • Вот
            • 19 июня 2013 г.
            • Виталий, вопрос тот же, скачали этот файл, но видимо для новой версии он уже не актуален, можете нам подсказать в каком именно файле из серии shop.view нужно редактировать отображение колонок?
              • 19 июня 2013 г.
              • Конечно, 2010-ый год, еще 4.х версия.

                Сейчас это /modules/shop/views/shop.view.list.php - там все в одном файле посвящено выводу списка товаров.
  • 21 декабря 2010 г.
  • Виталий я правильно понимаю ваше описание:

    Код
    //товары в разделе
    echo "<table><tr><td>";
    $nnn=1;
    if(! empty($result["rows"]))
    {
    foreach($result["rows"] as $row)
    {
    echo '
    <div class="shop">
    <div class="shop-name"><a href="'.BASE_PATH_HREF.$row["link"].'">'.$row["name"].'</a></div>';
    if(! empty($row["img"]))
    {
    echo '<div class="shop-img">';
    if(! empty($row["img"]["link"]))
    {
    echo '<a href="'.BASE_PATH_HREF.$row["img"]["link"].'">'.$row["img"]["tag"].'</a>';
    }
    elseif(! empty($row["img"]))
    {
    foreach($row["img"] as $img)
    {
    echo ' <a href="'.BASE_PATH_HREF.$img["link"].'">'.$img["tag"].'</a>';
    }
    }




    echo '</div>';
    }
    echo (empty($row["depend"]) && ! empty($row["price"]) ? '<div class="shop-price">'._LANG_PRICE.': <span class="shop-price-value">'.$row["price"].'</span> <span class="shop-price-currency">'.$result["currency"].'</span></div>' : '');
    self::form($row, $result);
    if(! empty($row["param"]))
    {
    foreach($row["param"] as $k => $v)
    {
    echo '
    <div class="shop-param">'.$k.($v ? ': <span class="shop-param-value">'.(is_array($v) ? implode(', ',$v) : $v).'</span>' : '')."</div>\n";
    }
    }
    echo (! empty($row["anons"]) ? '
    <div class="shop-text">'.$row["anons"].'</div>' : '').'



    </div>';
    if ($nnn%3==0) echo "</td></tr><tr><td>"; else echo "</td><td>";
    $nnn++;
    }
    }
    echo "</td></tr></table>";
    //ссылка на все товары
    • 21 декабря 2010 г.
    • Навскидку, да. Если не перекрестили нигде теги и это show_list из shop.view.php
      Пробуйте, смотрите на результат.
  • 23 декабря 2010 г.
  • Я когда заботился темой нескольких колонок натолкнулся на шаблон "зимний день" вот тут http://templates.diafan.ru/show5/ там хоть и в две колонки, но додумать там как сделать в три не сложно. Тем более в шаблоне уже всё со стилями красивыми. И первая строчка там по особому выделяется. Классный шаблон для экспериментов с колонками.
  • 13 марта 2011 г.
  • Уважаемые коллеги, приветствую! Установил этот шаблон "зимний день", как раз для того, чтобы сделать больше колонок в магазине, нужно - 3-4. В шаблоне только две, а вот дополнить - не получается... И способ Виталия не помогает в случае с этим шаблоном, как я понимаю. Очень прошу, помогите советом, это, безусловно, положительно отразится на вашей карме и перерождениях в следующих жизнях Код шаблона прилагаю...
  • 15 марта 2011 г.
  • Ребята, сможет кто-нибудь помочь? очень надо!...
    • 16 марта 2011 г. , редакция: 16 марта 2011 г.
    • А сайт какой? Дайте взглянуть. Сразу на него и отсоветуем.
      Многое зависит от версии, от правленной верстки и пр.
  • 16 марта 2011 г.
  • Виталий, спасибо за желание помочь! сайт на домене art-narod.ru. в разделе "каталог" товары (картины). сейчас в 2 колонки, нужно - 3 или 4. и желательно чтобы подписи к каждому товару размещались под картинкой, а не справа. теоретически - как-то просто должно быть, а практически не могу допетрить...
    • 17 марта 2011 г. , редакция: 17 марта 2011 г.
    • Все просто!
      Файл /modules/shop/shop.view.php
      функция first_page для первой страницы каталога (http://art-narod.ru/shop/) или функция list_ для списка (http://art-narod.ru/shop/cat11/)
      //товары в разделе
      Обратите внимание, открывается таблица
      Код
      echo '<table class="shop-block">';

      затем есть переменная $k=0;
      Если $k пустая, то выводится еще одна колонка: </td><td> и в конце переменная делается не пустой ($k=1-$k;). Тогда в очередной цикл она проверится и уже откроется новая строка.
      Код
      (!$k?'
      <tr valign="top">
      <td class="shop-td-first">'
      :'
      <td>'
      )

      В данном алгоритме $k - переключатель в двух положениях, либо пусто, либо нет. Поэтому две колонки.

      Поправьте $k, чтобы в конце цикла $k обнулялось когда доходит до 3 или 4. И закрывайте tr когда $k достигает 3 или 4. И все!
      • 17 марта 2011 г.
      • Виталий, читаю Ваше объяснение - все, вроде, понятно. Но попытки правки заканчиваются неминуемыми ошибками синтаксиса... что-то я не так делаю... Огромная просьба, можно указать прямо в коде, куда и что вставить правильно?
        Код
        //товары в категории
        if(! empty($cat["rows"]))
        {
        $k = 0;
        $m = 0;
        echo '
        <table class="shop-block">';
        foreach($cat["rows"] as $row)
        {
        echo
        (!$k?'
        <tr valign="top">
        <td class="shop-td-first">'
        :'
        <td>'
        )
        .($m?'<hr>':'').'
        <div class="shop-img">';
        if(! empty($row["img"]["link"]))
        {
        echo '<a href="'.BASE_PATH_HREF.$row["img"]["link"].'">'.$row["img"]["tag"].'</a>';
        }
        elseif(! empty($row["img"]))
        {
        foreach($row["img"] as $img)
        {
        echo ' <a href="'.BASE_PATH_HREF.$img["link"].'">'.$img["tag"].'</a>';
        }
        }
        echo '</div>
        <div class="shop-name"><a href="'.BASE_PATH_HREF.$row["link"].'">'.$row["name"].'</a> '.$row["show-rating"].'</div>
        <div class="shop-text">'.$row["anons"].'</div>'
        .($row["price"]?'
        <div class="shop-price">'._LANG_PRICE.': <span class="shop-price-value">'.$row["price"].'</span> <span class="shop-price-currency">'.$result["currency"].'</span></div>':'');
        self::form($row, $result);
        echo (!empty($row["tags"])?$row["tags"]:'').'
        </td>'
        .($k?'
        </tr>':'');


        if($k)
        {
        $m=1;
        }
        $k=1-$k;
        }
        echo ($k?'
        </tr>':'').'
        </table>';
        }
        echo '
        </div>';
        }

        return TRUE;
        }
        • 18 марта 2011 г.
        • Постю не проверяя, должно работать
          Код

          //товары в категории
          if(! empty($cat["rows"]))
          {
          $k = 0;
          $m = 0;
          echo '
          <table class="shop-block">
          <tr valign="top">';
          foreach($cat["rows"] as $row)
          {
          echo '<td>'.
          ($m?'<hr>':'').'
          <div class="shop-img">';
          if(! empty($row["img"]["link"]))
          {
          echo '<a href="'.BASE_PATH_HREF.$row["img"]["link"].'">'.$row["img"]["tag"].'</a>';
          }
          elseif(! empty($row["img"]))
          {
          foreach($row["img"] as $img)
          {
          echo ' <a href="'.BASE_PATH_HREF.$img["link"].'">'.$img["tag"].'</a>';
          }
          }
          echo '</div>
          <div class="shop-name"><a href="'.BASE_PATH_HREF.$row["link"].'">'.$row["name"].'</a> '.$row["show-rating"].'</div>
          <div class="shop-text">'.$row["anons"].'</div>'
          .($row["price"]?'
          <div class="shop-price">'._LANG_PRICE.': <span class="shop-price-value">'.$row["price"].'</span> <span class="shop-price-currency">'.$result["currency"].'</span></div>':'');
          self::form($row, $result);
          echo (!empty($row["tags"])?$row["tags"]:'').'</td>';
          if ($k>3) { echo '</tr><tr>'; $k=0; } else { $k++; }


          if($k)
          {
          $m=1;
          }

          }
          echo '</tr></table>';
          }

          }
          echo '
          </div>';
          }

          return TRUE;
          }
          • 18 марта 2011 г.
          • Не, Виталь, ошибку выдает... вот как и у меня...
            • 18 марта 2011 г.
            • Строка 11:
              Код
              .($m?'<hr>':'').'


              В таких случаях режим разработки можно влкючить (в Параметрах сайта), скрипт Вам напишет в такой то строке ошибка.
              • 18 марта 2011 г.
              • Марина, вставляю Ваш код, все равно ошибка. Именно в этой строке. Пишет:
                Parse error: syntax error, unexpected '.' in .../art-narod.ru/www/modules/shop/shop.view.php on line 236

                236-я в общем файле = 11-й в приведенном выше фрагменте...
  • 02 апреля 2011 г.
  • а как сделать чтоб в магазине для разной категории выводилось разное кол-во колонок?
    • 04 апреля 2011 г.
    • В шаблон list_ передается переменная $result["id"] с номером текущей категории. Можете анализируя эту переменную выводить свой шаблон для каждой категории. Например:
      Код
      if(! empty($result["id"]) && $result["id"] == '1')
      {
      //выводим 2 колонки для первой категории
      }
      else
      {
      //выводим 5 колонок по умолчанию
      }
    • 04 апреля 2011 г. , редакция: 04 апреля 2011 г.
    • Я в последнее время склоняюсь к тому чтобы модульные структуры образующие колонки оформлять не таблицей а DIV'ами прилепленными влево или вправо. Они начинают размазываться по ширине аккуратно заполняя пространство рабочей области под любое разрешение.
      Есть только небольшая проблемка с решением растяжки блока являющегося обёрткой для данной структуры повысоте но и она тоже решается :)
  • 04 апреля 2011 г.
  • Народ, помогите! Нужно главную страницу магазина сделать таким образом: 2 колонки: в каждой колонке блок из: Имя категории (заголовок H2), фотка категории, и под ней "ПОСМОТРЕТЬ ВСЕ ТОВАРЫ КАТЕГОРИИ" Из кода шаблона главной страниц убрал всё лишнее, вот код, как сделать?:)
    Код
    /**
    * Шаблон первой страницы магазина
    *
    * @param array $result сгенерированные в моделе данные
    * @return boolean
    */
    public function first_page($result)
    {
    if(empty($result["categories"]))
    return FALSE;

    //категории
    foreach($result["categories"] as $cat_id => $cat)
    {
    echo '<div class="shop_list">';

    //название категории
    echo '<h2>'.$cat["name"].'</h2>';

    //краткое описание категории
    if(! empty($cat["anons"]))
    {
    echo '<div class="shop_cat_text">'.$cat["anons"].'</div>';
    }

    //изображения категории
    if(! empty($cat["img"]))
    {
    echo '<div class="shop_cat_img">';
    foreach($cat["img"] as $img)
    {
    switch($img["type"])
    {
    case 'animation':
    echo '<a href="'.BASE_PATH.$img["link"].'" rel="prettyPhoto[gallery'.$cat_id.'shop]">';
    break;
    case 'big_image':
    echo '<a href="'.BASE_PATH.$img["link"].'" rel="big_image" width="'.$img["link_width"].'" height="'.$img["link_height"].'">';
    break;
    default:
    echo '<a href="'.BASE_PATH_HREF.$img["link"].'">';
    break;
    }
    echo '<img src="'.$img["src"].'" width="'.$img["width"].'" height="'.$img["height"].'" alt="'.$img["alt"].'" title="'.$img["title"].'">'
    .'</a> ';
    }
    echo '</div>';
    }

    //подкатегории
    if(! empty($cat["children"]))
    {
    foreach($cat["children"] as $child)
    {
    //название и ссылка подкатегории
    echo '<div class="shop_cat_links"><a href="'.BASE_PATH_HREF.$child["link"].'">'.$child["name"].'</a></div>';

    //краткое описание подкатегории
    if(! empty($child["anons"]))
    {
    echo '<div class="shop_cat_text">'.$child["anons"].'</div>';
    }

    //изображения подкатегории
    if(! empty($child["img"]))
    {
    echo '<div class="shop_cat_img">';
    foreach($child["img"] as $img)
    {
    switch($img["type"])
    {
    case 'animation':
    echo '<a href="'.BASE_PATH.$img["link"].'" rel="prettyPhoto[gallery'.$child["id"].'shop]">';
    break;
    case 'big_image':
    echo '<a href="'.BASE_PATH.$img["link"].'" rel="big_image" width="'.$img["link_width"].'" height="'.$img["link_height"].'">';
    break;
    default:
    echo '<a href="'.BASE_PATH_HREF.$img["link"].'">';
    break;
    }
    echo '<img src="'.$img["src"].'" width="'.$img["width"].'" height="'.$img["height"].'" alt="'.$img["alt"].'" title="'.$img["title"].'">'
    .'</a> ';
    }
    echo '</div>';
    }
    }
    }

    //товары в категории
    if(! empty($cat["rows"]))
    {
    foreach($cat["rows"] as $row)
    {
    echo '<div class="shop">';

    //изображения товара
    if(! empty($row["img"]))
    {
    echo '<div class="shop_img">';
    foreach($row["img"] as $img)
    {
    switch($img["type"])
    {
    case 'animation':
    echo '<a href="'.BASE_PATH.$img["link"].'" rel="prettyPhoto[gallery'.$row["id"].'shop]">';
    break;
    case 'big_image':
    echo '<a href="'.BASE_PATH.$img["link"].'" rel="big_image" width="'.$img["link_width"].'" height="'.$img["link_height"].'">';
    break;
    default:
    echo '<a href="'.BASE_PATH_HREF.$img["link"].'">';
    break;
    }
    echo '<img src="'.$img["src"].'" width="'.$img["width"].'" height="'.$img["height"].'" alt="'.$img["alt"].'" title="'.$img["title"].'">'
    .'</a> ';
    }
    echo '</div>';
    }

    //название и ссылка товара
    echo '<div class="shop_name"><a href="'.BASE_PATH_HREF.$row["link"].'">'.$row["name"].'</a>';

    //рейтинг товара
    if(! empty($row["show_rating"]))
    {
    echo ' '.$row["show_rating"];
    }
    echo '</div>';

    //артикул
    if(! empty($row["article"]))
    {
    echo '<div class="shop_article">'.$this->_('ARTICLE').': <span class="shop_article_value">'.$row["article"].'</span></div>';
    }

    //цена на товар
    if(empty($row["depend"]) && ! empty($row["price"]))
    {
    echo '<div class="shop_price">'.$this->_('PRICE').': <span class="shop_price_value">'.$row["price"].'</span> <span class="shop_price_currency">'.$result["currency"].'</span></div>';
    if(! empty($row["old_price"]))
    {
    echo '<div class="shop_old_price">'.$this->_('OLD_PRICE').': <span class="shop_price_value">'.$row["old_price"].'</span>'
    .' <span class="shop_price_currency">'.$result["currency"].'</span></div>';
    }
    }

    //скидка на товар
    if(! empty($row["discount"]))
    {
    echo '<div class="shop_discount">'.$this->_('DISCOUNT').': <span class="shop_discount_value">'.$row["discount"].' %</span></div>';
    }

    // параметры товара
    if(! empty($row["param"]))
    {
    self::param($row["param"]);
    }

    //краткое описание товара
    if(! empty($row["anons"]))
    {
    echo '<div class="shop_text">'.$row["anons"].'</div>';
    }

    //кнопка "Купить"
    self::form($row, $result);

    //теги товара
    if(! empty($row["tags"]))
    {
    echo $row["tags"];
    }
    echo '</div>';
    }
    }

    //ссылка на все товары в категории
    if($cat["link_all"])
    {
    echo '<div class="show_all"><a href="'.BASE_PATH_HREF.$cat["link_all"].'">'
    .$this->_('SHOW_ALL_GOODS_IN_CATEGORY').' '.$this->_('LQUOT').$cat["name"].$this->_('RQUOT')
    .'</a></div>';
    }
    echo '</div>';
    }

    return TRUE;
    }



    так то начинаю потихоньку вникать в суть проблемы, но специальность у меня "инженер автомобильного транспорта" так что...
    • 04 апреля 2011 г.
    • блин ! вот правильный кусок кода! в буфере обмена не то было, отправил и сейчас только заметил :(

      Код
      /**
      * Шаблон первой страницы магазина
      *
      * @param array $result сгенерированные в моделе данные
      * @return boolean
      */
      public function first_page($result)
      {
      if(empty($result["categories"]))
      return FALSE;

      //категории
      foreach($result["categories"] as $cat_id => $cat)
      {
      echo '<div class="shop_list">';

      //название категории
      echo '<h2>'.$cat["name"].'</h2>';

      //краткое описание категории
      if(! empty($cat["anons"]))
      {
      echo '<div class="shop_cat_text">'.$cat["anons"].'</div>';
      }

      //изображения категории
      if(! empty($cat["img"]))
      {
      echo '<div class="shop_cat_img">';
      foreach($cat["img"] as $img)
      {
      switch($img["type"])
      {
      case 'animation':
      echo '<a href="'.BASE_PATH.$img["link"].'" rel="prettyPhoto[gallery'.$cat_id.'shop]">';
      break;
      case 'big_image':
      echo '<a href="'.BASE_PATH.$img["link"].'" rel="big_image" width="'.$img["link_width"].'" height="'.$img["link_height"].'">';
      break;
      default:
      echo '<a href="'.BASE_PATH_HREF.$img["link"].'">';
      break;
      }
      echo '<img src="'.$img["src"].'" width="'.$img["width"].'" height="'.$img["height"].'" alt="'.$img["alt"].'" title="'.$img["title"].'">'
      .'</a> ';
      }
      echo '</div>';
      }



      //ссылка на все товары в категории
      if($cat["link_all"])
      {
      echo '<div class="show_all"><a href="'.BASE_PATH_HREF.$cat["link_all"].'">'
      .$this->_('SHOW_ALL_GOODS_IN_CATEGORY').' '.$this->_('LQUOT').$cat["name"].$this->_('RQUOT')
      .'</a></div>';
      }
      echo '</div>';
      }

      return TRUE;
      }
  • 05 апреля 2011 г.
  • Ребята, давайте я один раз напишу принцип и вы будете его применять везде сами, как сильные программисты?
    В HTML есть такое понятие, как таблица:
    Код
    <table> - это таблица
    <tr> - это 1 строка
    <td></td> - это 1 колонка 1 строки
    <td></td> - это 2 колонка 1 строки
    </tr>
    <tr>
    - это 2 строка
    <td></td> - это 1 колонка 2 строки
    <td></td> - это 2 колонка 2 строки
    </tr>
    <tr>
    - это 3 строка
    <td></td> - это 1 колонка 3 строки
    <td></td> - это 2 колонка 3 строки
    </tr>
    </table>

    Видите принцип?
    По краям стоит <table></table>
    Каждая строка начинается и заканчивается <tr></tr>
    И внутри каждой строки есть колонки <td>содержимое</td>
    Т.е. у нас в таблице повторяются <tr></tr> - это строки в таблице, а в каждой строке повторяются по две колонки <td></td>.

    Соответственно, чтобы в РНР вывести таблицу надо сделать цикл:

    Код
    echo "<table>";
    цикл { //for или while или foreach
    echo "<tr><td></td><td></td></tr>";
    }
    echo "</table>";


    Понятно? Если будет цикл в 3 круга, этот код выведет таблицу с тремя строками и двумя колонками в каждой, как в примере выше.

    Или вложенный цикл:
    Код
    echo "<table>";
    foreach() {
    echo "<tr>";
    foreach() {
    echo "<td></td>";
    }
    echo "</tr>";
    }
    echo "</table>";


    Надеюсь, это понятно.

    Теперь: если у вас один цикл, в котором куча товаров выводятся подряд, один за одним:
    Код
    foreach {
    вывод товара;
    }
    и их надо вывести в две колонки, что надо сделать? Первым делом надо вывести снаружи цикла таблицу.
    Код
    <table>
    foreach {
    вывод товара;
    }
    </table>
    Почему снаружи, а не в цикле? Потому, что таблица одна будет.
    Теперь каждое содержимое цикла надо выводить в ячейке таблицы. Для этого надо вывести начало строки <tr> и начало колонки <td>. Затем вывести содержимое цикла и закрыть колонку и строку:
    Код
    <table>
    foreach {
    echo "<tr>";
    echo "<td>";
    вывод товара;
    echo "</td>";
    echo "</tr>";
    }
    </table>

    Этот цикл выведет товары в одну колонку, а нам надо в две.
    Т.е. надо <tr> <td>один товар</td> и еще раз <td>второй товар</td> </tr>
    Или другими словами в цикле надо первый раз вывести
    Код
    echo "<tr>";
    echo "<td>";
    вывод товара;
    echo "</td>";
    И второй раз вывести
    Код
    echo "<td>";
    вывод товара;
    echo "</td>";
    echo "</tr>";

    Затем то же самое снова:
    первая колонка - вторая
    первая-вторая
    первая-вторая
    и т.д.

    Для этого нам надо знать, какой товар по счету выводится, первый или второй. Введем любую переменную $pipka и будем ею считать колонки:
    Код
    <table>
    $pipka=0; //сделаем наш счетчик 0, чтобы понимать, что не выведено пока ничего и будет выводиться первая колонка
    foreach {
    if ($pipka==0) echo "<tr>";
    //т.е. выводим tr для первого раза, когда счетчик
    echo "<td>";
    вывод товара;
    echo "</td>";
    $pipka++; // делаем наш счетчик +1, потому, что товар вывели
    if ($pipka==2) { echo "</tr>"; $pipka=0; } // если первый товар выведен, то $pipka будет равна 1 и строка </tr> не закроется. А если уже второй раз цикл пройдется, то $pipka станет 2 и тогда </tr> закроется и $pipka станет 0, для очередного цикла. И тогда сработает первое условие if ($pipka==0) которое откроет новую строку.
    }
    </table>


    Таким образом цикл настрочит таблицу с кучей строк и с двумя колонками, в каждой из которых будет товар!

    Еще яснее объяснить не могу!
    • 05 апреля 2011 г.
    • Во! супер) Виталию большое ЧЕЛОВЕЧЕСКОЕ спасибо пойду в денвере покапаюсь! очень подробно!
    • 06 апреля 2011 г. , редакция: 06 апреля 2011 г.
    • Виталь сколько времени убил? Мог бы какую нибудь небольшую фишечку для магазина настроить. Меня ломает объяснять школьный курс информатики клиентам, если толку нет, то тогда я говорю, давайте я сам сделаю за денежку. У клиентов сразу все вопросы пропадают. Или даю ссылочку на материал по теме. Тут уместнее всего было послать на обалденный учебник по HTML сам его часто рекомендую студентам или начинающим проявляющим к этому делу интерес клиентам всё-таки, как никак не всё можно решить интегрированным в CMS редактором.
      1. http://www.postroika.ru/html/21step2.html
      циклы зачем они нужны и как их использовать.
      2. http://ab-w.net/PHP/php_loop.php
      Иещё одно замечание. Я предпочитаю дописывать таблицу до конца то-есть если у нас вдруг товары заканчиваются на первой колонке то необходимо вставить ещё одну пустую ячейку во вторую колонку или больше в зависимости от того сколько у нас всего колонок. Плюс всё-таки необходимо закрыть строчку коли она начата. Это необходимо чтобы таблица имела законченный вид. В выше указанном примере нет таких проверок и целостность таблицы может быть нарушена.
      aprofi (aprofi)Учи мат часть - удачи.
      • 06 апреля 2011 г.
      • Сколько времени... Много! С час точно.
        Но это уже третий раз только на форуме, когда спрашивают одно и тоже, только для разных в оформлении функций. Лучше потом сюда сослать и не отвечать, чем каждому править!
        Замечание... Если бы я еще про закрытие ячеек стал рассказывать, я бы завис еще на полчаса... Начинающим и так сойдет! Потом копнут, сами поправят!
      • 09 апреля 2011 г.
      • Цитата
        Виталь сколько времени убил? Мог бы какую нибудь небольшую фишечку для магазина настроить. Меня ломает объяснять школьный курс информатики клиентам, если толку нет, то тогда я говорю, давайте я сам сделаю за денежку. У клиентов сразу все вопросы пропадают. Или даю ссылочку на материал по теме. Тут уместнее всего было послать на обалденный учебник по HTML сам его часто рекомендую студентам или начинающим проявляющим к этому делу интерес клиентам всё-таки, как никак не всё можно решить интегрированным в CMS редактором.
        1. http://www.postroika.ru/html/21step2.html
        циклы зачем они нужны и как их использовать.
        2. http://ab-w.net/PHP/php_loop.php
        Иещё одно замечание. Я предпочитаю дописывать таблицу до конца то-есть если у нас вдруг товары заканчиваются на первой колонке то необходимо вставить ещё одну пустую ячейку во вторую колонку или больше в зависимости от того сколько у нас всего колонок. Плюс всё-таки необходимо закрыть строчку коли она начата. Это необходимо чтобы таблица имела законченный вид. В выше указанном примере нет таких проверок и целостность таблицы может быть нарушена.
        aprofi (aprofi)Учи мат часть - удачи.


        Цитата
        Сколько времени... Много! С час точно.
        Но это уже третий раз только на форуме, когда спрашивают одно и тоже, только для разных в оформлении функций. Лучше потом сюда сослать и не отвечать, чем каждому править!
        Замечание... Если бы я еще про закрытие ячеек стал рассказывать, я бы завис еще на полчаса... Начинающим и так сойдет! Потом копнут, сами поправят!


        Уже читаю, спасибо вам :)
        • 19 апреля 2011 г.
        • В релизе 4.4.1 кто-нибудь тестил данное решение. Файл модуля shop.view.php изменился.
          • 19 апреля 2011 г.
          • Виталий спасибо за потраченное время, но у меня не получилось. Может поправите оригинал. Сделаю вывод и выложу с объяснениями для всех.
            if(! empty($result["rows"]))
            {
            //открываем таблицу перед циклом
            echo "<table><tr><td>";
            $pipka=0;
            foreach {
            if ($pipka==0) echo "<tr>"; //т.е. выводим tr для первого раза, когда счетчик
            echo "<td>";

            вывод товара и т.д.
            foreach($result["rows"] as $row)
            {
            echo '<div class="shop">';

            финал echo "</td>"; $pipka++;
            if ($pipka==2) { echo "</tr>"; $pipka=0; }
            }
            </table>
          • 19 апреля 2011 г.
          • А причем тут версия? Принцип тот же. К тому же view изменился несильно.
  • 19 апреля 2011 г.
  • Дмитрий (Onmaster) подскажите как сделать проверку (на основании примера Виталия) - чтобы таблица имела законченный вид.
    • 20 апреля 2011 г. , редакция: 20 апреля 2011 г.
    • хе хе я же говорил что таблицы -ЗЛО
      ну вот в принципе после цикла
      Код
      foreach($result["rows"] as $row) {
      ...
      }

      Надо ставить проверки на законченность структуры для правильной расстановки пипок нужен
      цикл ставим пипку пока их не будет 2 то {
      ещё <td></td>
      увеличиваем пипку на 1
      }
      после того как пипки рассравлены надо закрыть строку и таблицу
  • 20 апреля 2011 г.
  • Дмитрий (Onmaster) можете прикрепить решение на дивах.
    Или помогите закончить проблему с 2-3 колонками на таблицах.
    Виталий от вас нужна помощь
    Сбился с пути.
    • 21 апреля 2011 г.
    • Ребят, надоело, честно. Это первый класс программирования. К diafan.CMS отношения прямого не имеет. Эта тема максимально информационна, проще рассказать я не могу. Если тему замусорить файлами "Сделайте мне", "И мне сделайте то же самое", "И мне", "И для меня" и так далее еще 50 человек одно и то же - несерьезно.
      Могу только посоветовать echo "1";
      Ставьте "методом тыка", смотрите: где выходит, сколько раз выходит, после чего выходит, делайте выводы.
      Если не можете разобраться с примитивным циклом одной вложенности, то лучше бросить программирование, заказать у программиста эту доработку за пару сотен рублей и пару минут и все.
      • 26 ноября 2012 г.
      • Обращусь с просьбой к бывалым.
        А можно ли под свежую версию diafan.CMS.5.1.1 скорректировать 3х колончатый вывод товаров для Главной?
        Понимаю, что тема достала. Помогите пожалуйста!
        Извините за доставучесть((
  • 03 июня 2011 г.
  • Диафанщики наверное запарились отвечать по этой теме. Поэтому спрашиваю у таких как я пользователей.
    У меня с помощью css выводится 3 товара в строке. НО! При добавлении 1-го или 2-го товара в корзину смещаются вниз нижние товары - см. приаттаченную картинку. При этом если добавлять в корзину 3-й товар, то никакого смещения нет.

    В общем какой-то мой css косяк. Не знаете как исправить?

    Вот http://floral-kingdom.com.ua/shop/bukety/bukety_iz_roz/
  • 01 ноября 2011 г.
  • Вроде получилось на стандартном шаблоне вывести n-колонок, ЦМС 4.5
    шоп.вью во вложении.

    Вопрос к разработчикам: что за блок такой <div id="clear"></div>?
    можно ли размещать закрытие таблицы </td></tr></table> после этого блока?

    кусок кода:


    Код

    начало цикла вывода товаров
    ....
    ....
    //вывод кнопки "Купить"
    self::form($row, $result);
    echo '</td></tr></table>';
    //мои правки
    if ($nnn%3==0) echo "</td></tr><tr><td>"; else echo "</td><td>";
    $nnn++;
    } //конец цикла foreach() вывода товаров

    echo '<div class="clear"></div>'; - что это такое?
    //мои правки
    echo "</td></tr></table>";
    - можно ли закрыть эту таблицу после этого блока "clear"?

    } //конец блока if, который перед циклом вывода товаров


    • 01 ноября 2011 г.
    • Код
      <div id="clear"></div>

      Необходимый инструмент для борьбы с наездами блоков друг на друга.
      Если выше есть блоки у которых в стиляих например имеются float: left; или float: right; то идущие за ними блоки будут обтекать их. Вот чтобы не обтекали и ставится <div id="clear"></div> у которого есть свойство clear: both;
    • 01 ноября 2011 г.
    • Это как отбивочная линия, типа невидимого HR. Между слоями.
      Если Вы контролируете блоки сами, ячейками таблиц, то можете удалить. Или оставить как есть сейчас.
  • 02 ноября 2011 г. , редакция: 03 ноября 2011 г.
  • Насколько правильное решение по выводу товара в 2 колонке на divах? Вопрос к сообществу.
    Вопрос к Дмитрий (Onmaster): если выше было озвучено о закрытие таблиц через проверку, дабы получить целостность. То как быть с дивами?
    //товары в категории
    if (! empty($cat["rows"]))
    {
    echo '<div class="contener">';
    $i=1;

    foreach ($cat["rows"] as $row)
    {
    echo ($i==1?'<div class="cont_one"><div class="shop_td_first">':'</div><div class="shop_td_second">');
    echo '<div class="shop">';
    ---------------------------------------------------------------
    все что касается основного содержимого
    //изображения товара
    if (! empty($row["img"]))
    и т.д. {
    ----------------------------------------------------------------
    echo '</div>';
    echo ($i<2?'':'</div></div>');
    if($i==2)$i=1;
    else $i++;
    }
    echo ($i==1?'':'</div></div>');
    echo '</div>';
    }
    • 03 ноября 2011 г. , редакция: 03 ноября 2011 г.
    • Адски
      Смотри делаешь контейнер, который выравниваешь с помощью float: left;
      А дальше всё просто
      Код

      количество столбцов = х;
      цикл (перебрать все) {
      вывод 'открыть контейнер';
      вывод '[содержимое контейнера]';
      вывод 'закрыть контейнер';
      количество столбцов--;
      если (!количество столбцов) {
      количество столбцов = x;
      вывод '<div id="clear"></div>'; // супер инструмент :)
      }
      }

      Помоему достаточно просто и элегантно и не надо парится по поводу целостности таблицы, как в случае с <table>.
      Осталось алгоритм на РНР перевести :)
  • 13 января 2012 г.
  • Добрый день,
    если кому надо прикрепляю файл shop.view.php
    для вывода данных в 3 колонки (табличный вариант).
    За основу брался файл из шаблона "Зимний день" версия 4.5.
    Внес в него правки согласно инструкций Виталий (Diafan.CMS). Спасибо большое за разъяснения.
    У меня вроде все заработало.
  • 23 ноября 2012 г.
  • Здравствуйте!

    В версии diafan.CMS.5.1.1 нет файла shop.view.php...
    Что в этом случае править?
  • 23 ноября 2012 г.
  • Думаю, что shop.view.list.php.
    • 23 ноября 2012 г.
    • Надо исходить из задачи.
      раньше был 1 файл shop.view.php
      Теперь этот файл раздраконили и вместо него куча файлов каждый view занимается формированием отображения конкретной штуки. Смотря что надо оформить такой и файл нужно править.
      shop.view.list.php - список категорий
      shop.view.id.php - Карточка товара
      shop.view.first_page.php - Корневая папка магазина и т.д. Внутри каждого файла есть подсказки если чего.
      • 26 ноября 2012 г.
      • Denis, ну не Шмагла, ни шмагла((
    • 26 ноября 2012 г.
    • Спасибо, Артур, не дается мне эта тема((
      • 27 ноября 2012 г.
      • Да это понятно.
        Мне тоже не давалась.
        Если сейчас мне понадобилось так сделать, то снова бы там возился.
  • 26 ноября 2012 г.
  • Обращусь с просьбой к бывалым.
    А можно ли под свежую версию diafan.CMS.5.1.1 скорректировать 3х колончатый вывод товаров для Главной?
    Понимаю, что тема достала. Помогите пожалуйста!
    Извините за доставучесть((
    • 27 ноября 2012 г.
    • Можно посмотреть в шаблонах бесплатных, как там реализовано
    • 27 ноября 2012 г.
    • Приложенный файлик должен Вам помочь. 4 на 3 смените только, в остальном затруднений быть не должно.
      • 27 ноября 2012 г.
      • Андрей, а в какой файл и в какое место сувать этот код?
        • 28 ноября 2012 г. , редакция: 28 ноября 2012 г.
        • Как правило товары, новости и т.д. в шаблонах выводятся циклом. Начинается он со строк

          "foreach ($result["rows"] as $row){"
          а заканчивается символом "}"

          Начало замените на
          $i=1;
          echo '<table>';
          foreach($result["rows"] as $row)
          {
          echo ($i==1?'<tr><td>':'</td><td>');

          а окночание, т.е. "}" на

          echo ($i<4?'':'</td></tr>');
          if($i==4)$i=1;
          else $i++;
          }
          echo ($i==1?'':'</td></tr>');
          echo '</table>';
  • 30 ноября 2012 г. , редакция: 30 ноября 2012 г.
  • Кстати, сейчас рылся в адмике Shop-Script PRO 2008 года (!) (сейчас называется - WebAsyst Shop-Script) и увидел у них опцию задания нужного количества столбцов - очень удобно!
    • 30 ноября 2012 г.
    • Ну и как часто планируется использовать эту опцию для отдельно взятого проекта? Могу ответить 1 раз. 1 раз это можно и решить путём настрйки шаблона - не так уж и долго.

      Выводы:
      Решение для диафана
      + Очень мало кода в CMS.
      - Непонятно для домохозяек.

      Решение ShopScript
      + Понятно для домохозяек
      - Очень много лишнего кода
  • 01 декабря 2012 г.
  • Денис, ты видел сколько на форуме об этом развели сыр-бора? Значит тема актуальная не только для домохозяек (покажи мне тут домохозяек).

    Ну, и скажи, сколько "лишнего" кода будет?
    • 03 декабря 2012 г.
    • Ну вот те персы, которые не могут освоить данный вопрос и есть домохозяйки.

      Там проблем особых нет, нужно уметь составлять простенькие алгоритмы на 1 вложенном цикле, этому учать в 7 классе общеобразовательной школы. И синтаксис PHP знать как этот алгоритм оформить.

      А уж HTML не знать человеку, который решил сайт сделать - это вообще позор.
      Любой 5 класник у которого есть комп наверное, это освоил если задавался целью сделать собственную страничку в интернете.
      • 03 декабря 2012 г.
      • Получается, что я домохозяйка по твоим стандартам.
        Хотя HTML знаю ещё с прошлого века.
      • 03 декабря 2012 г.
      • Где это у нас в 7 классе на PHP кодить учат???
        • 04 декабря 2012 г.
        • Не PHP, а простым алгоритмам.
          Хотя лично меня и этому в школе не учили...все в ворде печатали и в пейнте рисовали.
          • 04 декабря 2012 г.
          • Ну сейчас дети реактивные и стандарты поменялись с того времени. В 9 классе уже на С'ях роботов программять а азы раньше учат. В ворде и пайнте в 3-4 классе калякают. Блок схемы алгоритмы в 7'ом.
            • 04 декабря 2012 г.
            • Везет им)
              • 05 декабря 2012 г.
              • Да уж и не говори. Тоже завидую чёной завистью, ну почему я не родился на 20 лет позже.
                Но зато я нюхнул больше хардкора, о чём они могут только догадываться :)
  • 02 июня 2014 г.
  • Ребят, прошу помощи.
    Хочу сделать вывод товаров в магазине с одной колонкой (чтобы каждый товар на своей строчке)
    Вывод модуля осуществляется файлом shop.view.list.php. На данный момент товар выводится в 4 колонки, как файл ни крутил, все равно выводит 4.
    Вот код:
    Код
    //вывод списка товаров
    if (!empty($result["rows"]))
    {
    //вывод сортировки товаров
    if(! empty($result["link_sort"]))
    {
    echo $this->get('sort_block', 'shop', $result);
    }

    echo '<div class="shop-pane">';

    $rows = array(array(), array(), array(), array());

    $t = 0;
    foreach ($result["rows"] as $row => $value)
    {
    if($t > 3) $t = 0;
    $rows[$t][] = $value;
    $t++;
    }

    foreach ($rows as $value)
    {
    echo '<div class="shop-col">';
    foreach ($value as $row)
    {
    echo '<div class="shop-item">';


    Подскажите, пожалуйста, что поправить, чтобы выводился 1 товар в строке.
    • 02 июня 2014 г.
    • Двумерный массив здесь будет лишним. Достаточно будет сложить все товары в один ряд

      Код

      $rows[] = $value;


      и выводить одним циклом, как-то так:

      Код

      foreach ($rows as $row)
      {
      echo '<div class="shop-col">';
      echo '<div class="shop-item">';
    • 02 июня 2014 г.
    • Цитата
      На данный момент товар выводится в 4 колонки, как файл ни крутил, все равно выводит 4.

      И не все зависит только от кода. Очень многое зависит от CSS.
      • 02 июня 2014 г.
      • Если с минимумом усилий, то:
        Цитата
        if($t > 3) $t = 0;

        заменить на
        if($t > 0) $t = 0;
        и подправить в css настройку для shop-col и shop-item

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум