Вывод свойств товара и добавление новых

У меня установлен чистый osCommerce 2.3.3 rus с этого сайта.
Меня интересует список товаров, который выводится на самых последних уровнях вложенности категорий или подкатегорий.
В этой таблице выводятся не все свойства товаров. Не выводятся такие как вес, количество и производитель.

(Здесь есть изображение, скрытое от гостей. Для просмотра зарегистрируйтесь или залогиньтесь)


Как я понял за вывод списка товара отвечает catalog/includes/modules/product_listing.php
Там я нашел такой код:

$listing_query = tep_db_query($listing_split->sql_query);

    $prod_list_contents .= '  <div class="ui-widget-content ui-corner-bottom productListTable">' .
                           '    <table border="0" width="100%" cellspacing="0" cellpadding="2" class="productListingData">';

    while ($listing = tep_db_fetch_array($listing_query)) {
      $rows++;

      $prod_list_contents .= '      <tr>';

      for ($col=0, $n=sizeof($column_list); $col<$n; $col++) {
        switch ($column_list[$col]) {
          case 'PRODUCT_LIST_MODEL':
            $prod_list_contents .= '        <td>' . $listing['products_model'] . '</td>';
            break;
          case 'PRODUCT_LIST_NAME':
            if (isset($HTTP_GET_VARS['manufacturers_id']) && tep_not_null($HTTP_GET_VARS['manufacturers_id'])) {
              $prod_list_contents .= '        <td><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'manufacturers_id=' . $HTTP_GET_VARS['manufacturers_id'] . '&products_id=' . $listing['products_id']) . '">' . $listing['products_name'] . '</a></td>';
            } else {
              $prod_list_contents .= '        <td><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, ($cPath ? 'cPath=' . $cPath . '&' : '') . 'products_id=' . $listing['products_id']) . '">' . $listing['products_name'] . '</a></td>';
            }
            break;
          case 'PRODUCT_LIST_MANUFACTURER':
            $prod_list_contents .= '        <td><a href="' . tep_href_link(FILENAME_DEFAULT, 'manufacturers_id=' . $listing['manufacturers_id']) . '">' . $listing['manufacturers_name'] . '</a></td>';
            break;
          case 'PRODUCT_LIST_PRICE':
            if (tep_not_null($listing['specials_new_products_price'])) {
              $prod_list_contents .= '        <td align="right"><del>' .  $currencies->display_price($listing['products_price'], tep_get_tax_rate($listing['products_tax_class_id'])) . '</del>&nbsp;&nbsp;<span class="productSpecialPrice">' . $currencies->display_price($listing['specials_new_products_price'], tep_get_tax_rate($listing['products_tax_class_id'])) . '</span></td>';
            } else {
              $prod_list_contents .= '        <td align="right">' . $currencies->display_price($listing['products_price'], tep_get_tax_rate($listing['products_tax_class_id'])) . '</td>';
            }
            break;
          case 'PRODUCT_LIST_QUANTITY':
            $prod_list_contents .= '        <td align="right">' . $listing['products_quantity'] . '</td>';
            break;
          case 'PRODUCT_LIST_WEIGHT':
            $prod_list_contents .= '        <td align="right">' . $listing['products_weight'] . '</td>';
            break;
          case 'PRODUCT_LIST_IMAGE':
            if (isset($HTTP_GET_VARS['manufacturers_id'])  && tep_not_null($HTTP_GET_VARS['manufacturers_id'])) {
              $prod_list_contents .= '        <td align="center"><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, 'manufacturers_id=' . $HTTP_GET_VARS['manufacturers_id'] . '&products_id=' . $listing['products_id']) . '">' . tep_image(DIR_WS_IMAGES . $listing['products_image'], $listing['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT) . '</a></td>';
            } else {
              $prod_list_contents .= '        <td align="center"><a href="' . tep_href_link(FILENAME_PRODUCT_INFO, ($cPath ? 'cPath=' . $cPath . '&' : '') . 'products_id=' . $listing['products_id']) . '">' . tep_image(DIR_WS_IMAGES . $listing['products_image'], $listing['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT) . '</a></td>';
            }
            break;
          case 'PRODUCT_LIST_BUY_NOW':
            $prod_list_contents .= '        <td align="center">' . tep_draw_button(IMAGE_BUTTON_BUY_NOW, 'cart', tep_href_link(basename($PHP_SELF), tep_get_all_get_params(array('action')) . 'action=buy_now&products_id=' . $listing['products_id'])) . '</td>';
            break;
        }
      }

      $prod_list_contents .= '      </tr>';
    }

    $prod_list_contents .= '    </table>' .
                           '  </div>' .
                           '</div>';

    echo $prod_list_contents;
Судя по этому коду, PRODUCT_LIST_QUANTITY и PRODUCT_LIST_WEIGHT должны выводится, но не выводятся.
В чем может быть пробелма, куда копать дальше?

В идеале, когда разберусь с этим, хотелось бы добавить еще несколько свойств к товару и вывести их сюда же.

*

Love

Проблема в вас, в админке надо хорошо смотреть. Ищите в Настройках - Вывод товара.

« Последнее редактирование: 13 Дек 2013 11:17:48 am от Love »

Ищите в Настройках - Вывод товара.
Большое спасибо, не знаю как я не заметил этот пункт, несколько вечеров сидел пытался в коде разобраться)

Тогда другой вопрос, может вы знаете как в эту же таблицу вывести поле "Описание товара"
Я искал и на этом и на английском форуме, нигде не находил темы где бы описывался этот процесс.

*

Love

Ищите в Настройках - Вывод товара.
Большое спасибо, не знаю как я не заметил этот пункт, несколько вечеров сидел пытался в коде разобраться)

Тогда другой вопрос, может вы знаете как в эту же таблицу вывести поле "Описание товара"
Я искал и на этом и на английском форуме, нигде не находил темы где бы описывался этот процесс.
Нужно скрипты дописывать на эту страницу для описания.

Ну в общем у меня вроде получилось. Оказалось, что именно описание товара вывести сложнее, чем обычное свойство товара, т.к. описание привязано к определенному языку, а свойства - общие для всех языков.
Поэтому я добавил в бд еще одно поле к свойствам товара, удалось вывести его на странице категорий и в админке на странице добавления товара.
На странице с инфой о конкретном товаре и на странице настроек вывода товаров пока не сделал, т.к. не нашел какие файлы за это отвечают, но думаю тоже получится.

*

Spido

  • *
  • 1634

Получившийся результат и как сделали - публикуйте здесь.
Многим будет интересно и полезно это увидеть.

Если вам помогли, то не стесняйтесь отблагодарить донатом:
*

Love

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

Во вложении выкладываю измененные файлы, он представляет из себя добавление двух полей к свойствам товаров: год и заметка. Результат:

(Здесь есть изображение, скрытое от гостей. Для просмотра зарегистрируйтесь или залогиньтесь)

Проверена работоспособность для 2.3.3 Добавлять эти файлы лучше на чистый магазин, иначе файлы ваших модулей или тем могут быть переписаны.
Вообще все свойства товаров хранятся в двух таблицах products и products_description, первая предназначена для вывода различной числовой информации, вторая для вывода текстовой, поэтому вывод из таблицы products_dscription немного более сложный и я его не стал реализовывать, т.к. мой магазин только русскоязычный. Если у вас мультиязычный магазин, то мое решение для вас будет некорректным.

Распишу как примерно добавлять новую характеристику к товару :
1. Для начала добавим в базу данных в таблицу products новый столбец, назовем его, например products_year, тип данных: TEXT (но можно выбрать и другой тип)
2. Теперь, пока мы еще не закрыли phpMyAdmin, откроем таблицу configuration. В этой таблице находится несколько групп настроек, нас интересует группа под номером 8.
Она отвечает за панель администратора - Настройки - Вывод товара. Добавим в эту таблицу новую запись, как показано на скрине

(Здесь есть изображение, скрытое от гостей. Для просмотра зарегистрируйтесь или залогиньтесь)


3. Теперь нам нужно делать изменения в файлах, можете скопировать из архива в приложении и заменить. Или можно изменять последовательно несколько файлов.
За отображение свойств товара в категориях, отвечают файлы catalog/index.php и catalog/includes/modules/product_listing.php просто берете ищете все включения, например, products_quantity и PRODUCT_QUANTITY и добавляете свой porducts_year и PRODUCT_YEAR по такому же принципу, пример можно посмотреть опять же во вложении.
То же самое делаем с файлом catalog/admin/categories.php он отвечает за добавление и правку товара в админке.
То же самое делаем с файлом catalog/product_info.php он отвечает за вывод информации о конкретном товаре.

*

Spido

  • *
  • 1634

Хорошо проделанная работа и хорошее описание.
Но фотки лучше размещать здесь, а не на левых сайтах, набитых рекламой и вирусами.
Можно сначала загрузить фотки и сохранить сообщение. Потом скопировать получившуюся ссылку на фотку и отредактировать сообщение, вставив в тело сообщения эту ссылку.
Визуально будет так же, но качество фоток будет лучше.

Если вам помогли, то не стесняйтесь отблагодарить донатом: