Категории

[FAQ] Часто задаваемые вопросы и ответы

Проблемы и решения

Ошибки и исправления

Общие вопросы

Расширения

Установка и обновление

Модули

Шаблоны

Локализация интерфейса

Коммерческие предложения

Учимся бизнесу

Бизнес книги

Поисковая оптимизация (SEO)

Магазины на ShopOS

Хостинг для ShopOS

Предложения и пожелания

Курилка

Как сделать "Доп. поля для товаров" уникальными для разных товарных групп ?

Здравствуйте.
Мне для каждой товарной группы нужно использовать разные Доп.поля для описания товаров.
Я понимаю что можно создать большой список разных полей и в каждом товаре заполнять только нужное, но тогда возникает другой вопрос - некоторые поля будут пересекаться в разных группах товаров (например в ноутбуках и во флешках одинаковое поле - объем памяти) и очень трудно будет сделать правильный порядок вывода (сортировку) этих полей.

Хотелось бы в каждом товаре заполнять только то что относится к конкретной группе.
Либо, если уже делать один список, чтоб была возможность различать Название доп.поля и То что отображается, тогда я б сделал поля с названиями типа "Ноутбуки: Объем памяти" и "USB флешка: объем памяти" а отображаемое имя у обоих этих полей было бы "Объем памяти"

Либо предложите как это реализовать по-другому.


для доп полей вобщет, кроме твоего описания функционала, надо расширить и типы полей, и сделать возможность сортировки по ним. ну и само собой, возможность нормального экспорта импорта:)
заманчиво звучит, но наверно долгореализуемо


понятно. ждем новых версий скрипта


возможность нормального экспорта импорта:)


а чем текущей метод не устраивает?


Написал уже сам.


Написал уже сам.


И ак вы это реализовали?

может поделитесь - выложу для всех.



возможность нормального экспорта импорта:)


а чем текущей метод не устраивает?

ну при обновлени ассортимента не плохо бы сделать кнопку, которая выключает показ всех товаров.
а в новом прайсе я сразу заливаю/обновляю товары с меткой активные

а если по поводу мной вышеописанного, я имел ввиду если реализовать разные типы доп полей и разные категории, надо под новые доработки и экспорт импорт полей дорабатывать

ЗЫ: по поводу разных доп полей в разных категорях это можно легко зделать легко в габлонах админки.
добавить руками в шаблон добавления товаров, пару вкладок на javascript с разными категориями и готовыми доп полями



Написал уже сам.


И ак вы это реализовали?

может поделитесь - выложу для всех.


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


в таблице os_products_extra_fields создал новое поле products_extra_fields_name_internal
потом поменял файлы немножко чтоб это поле выводилось в админке на закладке доп поля
admin/product_extra_fields.php    (жирным шрифтом отмечен добавленный код)


require('includes/application_top.php');

$action = (isset($_GET) ? $_GET : '');
if (isset($_POST)) $action='remove';

if (os_not_null($action)) {
  switch ($action) {
    case 'setflag':
      $sql_data_array = array('products_extra_fields_status' => os_db_prepare_input($_GET));
  os_db_perform(TABLE_PRODUCTS_EXTRA_FIELDS, $sql_data_array, 'update', 'products_extra_fields_id=' . $_GET);
      os_redirect(os_href_link(FILENAME_PRODUCTS_EXTRA_FIELDS));
  break;
/*

*/
    case 'add':
      $sql_data_array = array('products_extra_fields_name_internal' => os_db_prepare_input($_POST),
                              'products_extra_fields_name' => os_db_prepare_input($_POST),
                          'languages_id' => os_db_prepare_input ($_POST),
  'products_extra_fields_order' => os_db_prepare_input($_POST));
os_db_perform(TABLE_PRODUCTS_EXTRA_FIELDS, $sql_data_array, 'insert');

      os_redirect(os_href_link(FILENAME_PRODUCTS_EXTRA_FIELDS));
      break;
#дальше все ок
     
    case 'update':
      foreach ($_POST as $key=>$val) {
        $sql_data_array = array('products_extra_fields_name_internal' => os_db_prepare_input($val),
          'products_extra_fields_name' => os_db_prepare_input($val),
                        'languages_id' =>  os_db_prepare_input($val),
  'products_extra_fields_order' => os_db_prepare_input($val));
  os_db_perform(TABLE_PRODUCTS_EXTRA_FIELDS, $sql_data_array, 'update', 'products_extra_fields_id=' . $key);
      }
      os_redirect(os_href_link(FILENAME_PRODUCTS_EXTRA_FIELDS));

      break;
    case 'remove':
      if ($_POST) {
        foreach ($_POST as $key=>$val) {
          os_db_query("DELETE FROM " . TABLE_PRODUCTS_EXTRA_FIELDS . " WHERE products_extra_fields_id=" . os_db_input($key));
          os_db_query("DELETE FROM " . TABLE_PRODUCTS_TO_PRODUCTS_EXTRA_FIELDS . " WHERE products_extra_fields_id=" . os_db_input($key));
        }
        os_redirect(os_href_link(FILENAME_PRODUCTS_EXTRA_FIELDS));
      }

      break;
  }
}

  $languages=os_get_languages();
  $values=array ('id' =>'0', 'text' => TEXT_ALL_LANGUAGES);
  for ($i=0, $n=sizeof($languages); $i<$n; $i++) {
$values=array ('id' =>$languages, 'text' =>$languages);
  }

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html <?php echo HTML_PARAMS; ?>>
<head>
<?php echo ADMIN_FAVICON;?>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo $_SESSION; ?>">
<title><?php echo TITLES; ?></title>
<?php os_styles("style"); os_styles("menu");?>
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF">
<?php require(DIR_FS_CATALOG.'admin/themes/'.ADMIN_TEMPLATE.'/header.php'); ?>
<table border="0" width="100%" cellspacing="2" cellpadding="2">
  <tr>
  <td width="100%" valign="top">
  <table border="0" width="100%" cellspacing="0" cellpadding="2">
    <tr>
    <td width="100%">
      <table border="0" width="100%" cellspacing="0" cellpadding="0">
      <tr>
        <td class="main">
       
    <?php os_header('portfolio_package.gif',HEADING_TITLE); ?>
       
       
        </td>
      </tr>
      </table>
    </td>
    </tr>

    <tr>
    <td width="100%">
      <?php echo "<b>".SUBHEADING_TITLE."</b>"; ?>
      <br />
      <?php echo os_draw_form("add_field", FILENAME_PRODUCTS_EXTRA_FIELDS, 'action=add', 'post'); ?>
      <table border="0" width="400" cellspacing="0" cellpadding="2">
      <tr class="dataTableHeadingRow">
        <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_FIELDS_INTERNAL; ?></td>
        <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_FIELDS; ?></td>
        <td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_ORDER; ?></td>
<td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_LANGUAGE; ?></td>
      </tr>

      <tr>
        <td class="dataTableContent">
          <?php echo os_draw_input_field('field', $field, 'size=30', false, 'text', true);?>
        </td>
        <td class="dataTableContent">
        <?php echo os_draw_input_field('field', $field, 'size=30', false, 'text', true);?>
        </td>
<td class="dataTableContent" align="center">
        <?php echo os_draw_input_field('field', $field, 'size=8', false, 'text', true);?>
        </td>
<td class="dataTableContent" align="center">
        <?php
echo os_draw_pull_down_menu('field', $values, '0', '');?>
        </td>
        <td  align="right">
<?php echo '<input type="submit" class="button" value="' . BUTTON_INSERT . '"/>'; ?>
        </td>
      </tr>
      </form>
      </table><br>
      <div style="width: 90%; border-top: 1px dashed #4378a1;" />
      <br>
      <?php
      echo os_draw_form('extra_fields', FILENAME_PRODUCTS_EXTRA_FIELDS,'action=update','post');
      ?>
      <?php echo $action_message; ?>
      <table border="0" width="100%" cellspacing="0" cellpadding="2">
      <tr class="dataTableHeadingRow">
        <td class="dataTableHeadingContent" width="20">&nbsp;</td>
        <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_FIELDS_INTERNAL; ?></td>
        <td class="dataTableHeadingContent"><?php echo TABLE_HEADING_FIELDS; ?></td>
        <td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_ORDER; ?></td>
<td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_LANGUAGE; ?></td>
        <td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_STATUS; ?></td>
      </tr>
<?php
$products_extra_fields_query = os_db_query("SELECT * FROM " . TABLE_PRODUCTS_EXTRA_FIELDS . " ORDER BY products_extra_fields_order");
while ($extra_fields = os_db_fetch_array($products_extra_fields_query)) {
?>
      <tr>
        <td width="20">
        <?php echo os_draw_checkbox_field('mark.']', 1) ?>
        </td>
        <td class="dataTableContent">
        <?php echo os_draw_input_field('field.']', $extra_fields, 'size=30', false, 'text', true);?>
        </td>     
        <td class="dataTableContent">
        <?php echo os_draw_input_field('field.']', $extra_fields, 'size=30', false, 'text', true);?>
        </td>
<td class="dataTableContent" align="center">
        <?php echo os_draw_input_field('field.']', $extra_fields, 'size=8', false, 'text', true);?>
        </td>
<td class="dataTableContent" align="center">
<?php echo os_draw_pull_down_menu('field.']', $values, $extra_fields, ''); ?>
        </td>
<td  class="dataTableContent" align="center">
        <?php
          if ($extra_fields == '1') {
            echo os_image(DIR_WS_IMAGES . 'icon_status_green.gif', IMAGE_ICON_STATUS_GREEN, 10, 10) . '&nbsp;&nbsp;<a href="' . os_href_link(FILENAME_PRODUCTS_EXTRA_FIELDS, 'action=setflag&flag=0&id=' . $extra_fields, 'NONSSL') . '">' . os_image(DIR_WS_IMAGES . 'icon_status_red_light.gif', IMAGE_ICON_STATUS_RED_LIGHT, 10, 10) . '</a>';
          }
          else {
            echo '<a href="' . os_href_link(FILENAME_PRODUCTS_EXTRA_FIELDS, 'action=setflag&flag=1&id=' . $extra_fields, 'NONSSL') . '">' . os_image(DIR_WS_IMAGES . 'icon_status_green_light.gif', IMAGE_ICON_STATUS_GREEN_LIGHT, 10, 10) . '</a>&nbsp;&nbsp;' . os_image(DIR_WS_IMAGES . 'icon_status_red.gif', IMAGE_ICON_STATUS_RED, 10, 10);
          }
        ?>
        </td>
      </tr>
<?php } ?>
      <tr>
        <td colspan="4">
        <?php echo '<input type="submit" class="button" value="' . BUTTON_UPDATE . '"/>'; ?>
        &nbsp;&nbsp;
<?php echo '<input type="submit" class="button" value="' . BUTTON_DELETE . '" name="remove" />'; ?>
        </td>
      </tr>
      </form>
      </table>
    </td>
    </tr>
  </table>
  </td>
</tr>
</table>
<?php require(DIR_FS_CATALOG.'admin/themes/'.ADMIN_TEMPLATE. '/footer.php'); ?>
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>


файл admin/langs/ru/product_extra_fields.php дополнил строкой
define('TABLE_HEADING_FIELDS_INTERNAL', 'Название поля (внутреннее)');

кажется все...
вроде редактировал еще categories.js, но сейчас не помню зачем. если вспомню - напишу

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


ок. спасибо за код)


Пожалуйста :)

забыл еще написать что поле products_extra_fields_name_internal в таблице os_products_extra_fields надо вставлять перед полем products_extra_fields_name.

иначе будет неправильный порядок вывода


Источник



Copyright ShopOS