Ответить Новая тема Новый опрос 
Всего: 2 < 1 2
 [хак] мультивыбор характеристик продукта
novoselov
Новичок
Сообщений: 23
Регистрация: 12-10-2011


31-01-2012 20:06
Anton, e_v_medvedev, большое спасибо, разобрался, теперь все попадает в базу.
Был указан PRIMARY KEY для полей 'id_feature' и 'id_product'. Просто удалил его и все, правда не знаю чем это чревато, и толком не понял что он дает. (если есть возможность объясните на пальцах)

и у меня снова проблема, характеристики мы залили, но теперь их нужно корректно вывести в шаблон.

сейчас все выводится как есть, функцией - product->getFrontFeatures
для наглядности приведу массив
Код:
Array
(
    [0] => Array
        (
            [name] => Текстовые форматы
            [value] => FB2.zip
            [id_feature] => 17
            [id_feature_value] => 34
        )

    [1] => Array
        (
            [name] => Текстовые форматы
            [value] => FB2
            [id_feature] => 17
            [id_feature_value] => 33
        )

    [2] => Array
        (
            [name] => Текстовые форматы
            [value] => Doc
            [id_feature] => 17
            [id_feature_value] => 35
        )

)




хотелось бы чтобы характеристики выводились по порядку
Текстовые форматы: fb2, doc, fb2.zip

для этого я обрабатываю результат функции product->getFrontFeatures
Код:
$features = $this->product->getFrontFeatures((int)self::$cookie->id_lang);
                                
                    $feature = array();
                    foreach ($features AS $k => $row)
                    {
                        $feature[$row['id_feature']] = array(
                            'name' => $row['name'],
                        );
                        
                    $feature[$row['id_feature']]['vals'][$row['id_feature_value']] = $row['value'];
                    }


на выходе имею массив
Код:
Array
(
    [17] => Array
        (
            [name] => Текстовые форматы
            [vals] => Array
                (
                    [B][35] => Doc[/B]
                )

        )

)

но проблема в том что в массив [vals] попадает только последнее значение :confus:
 
Вне форума
ПМ 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
novoselov
Новичок
Сообщений: 23
Регистрация: 12-10-2011


01-02-2012 00:00
переписал обработку массива
Код:
/* Features / Values */
                $features = $this->product->getFrontFeatures((int)self::$cookie->id_lang);
                                
                    foreach ($features AS $k => $row)
                    {
                        $feature[$row['name']][] = $row['value'];
                    }


теперь все ок
 
Вне форума
ПМ 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
novoselov
Новичок
Сообщений: 23
Регистрация: 12-10-2011


04-02-2012 23:06
Снова здравствуйте.

надумал еще немного допилить характеристики. Сделал заголовки к ним. Как на Я.Маркете.

Связал через pid. Путем добавления столбца "pid_feature" в таблицу "ps_feature"

Собственно вопрос (скорее консультация и критика) по запросу в функции getFrontFeaturesStatic .

Сам запрос:
Код:
Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
            SELECT fl.name, value, flq.name as pname
            FROM '._DB_PREFIX_.'feature_product pf
            LEFT JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature = pf.id_feature AND fl.id_lang = '.(int)$id_lang.')
            LEFT JOIN '._DB_PREFIX_.'feature f ON (f.id_feature = pf.id_feature)
            LEFT JOIN '._DB_PREFIX_.'feature_lang flq ON (flq.id_feature = f.pid_feature AND fl.id_lang = '.(int)$id_lang.')
            LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = pf.id_feature_value AND fvl.id_lang = '.(int)$id_lang.')
            WHERE pf.id_product = '.(int)$id_product);


возможно есть варианты сделать более правильно.
 
Вне форума
ПМ 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
e_v_medvedev
Профессионал
Сообщений: 806
Откуда: Москва
Регистрация: 25-03-2011


04-02-2012 23:33
Цитата:( novoselov @ 31-01-2012 16:06 Смотреть сообщение )
Был указан PRIMARY KEY для полей 'id_feature' и 'id_product'. Просто удалил его и все, правда не знаю чем это чревато, и толком не понял что он дает. (если есть возможность объясните на пальцах)

Primary key - важный механизм для контроля уникальности записей и связки таблиц в реляционных базах данных. На пальцах не объяснить. Читайте литературу по реляционным СУБД.


Сообщение отредактировано e_v_medvedev 04-02-2012 19:35 ...
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
e_v_medvedev
Профессионал
Сообщений: 806
Откуда: Москва
Регистрация: 25-03-2011


04-02-2012 23:48
Цитата:( novoselov @ 04-02-2012 19:06 Смотреть сообщение )
Снова здравствуйте. 

надумал еще немного допилить характеристики. Сделал заголовки к ним. Как на Я.Маркете. 

Связал через pid. Путем добавления столбца "pid_feature" в таблицу "ps_feature"

Собственно вопрос (скорее консультация и критика) по запросу в функции getFrontFeaturesStatic .

Сам запрос:
Код:
Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
            SELECT fl.name, value, flq.name as pname
            FROM '._DB_PREFIX_.'feature_product pf
            LEFT JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature = pf.id_feature AND fl.id_lang = '.(int)$id_lang.')
            LEFT JOIN '._DB_PREFIX_.'feature f ON (f.id_feature = pf.id_feature)
            LEFT JOIN '._DB_PREFIX_.'feature_lang flq ON (flq.id_feature = f.pid_feature AND fl.id_lang = '.(int)$id_lang.')
            LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = pf.id_feature_value AND fvl.id_lang = '.(int)$id_lang.')
            WHERE pf.id_product = '.(int)$id_product);


возможно есть варианты сделать более правильно.


В остальном, поймите правильно, заниматься разбором вашего кода нет времени. А давать советы без основательного анализа бессмысленно.
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Ответить Новая тема Новый опрос 
Всего: 2 < 1 2