как получить все атрибуты в prestashop

Мне нужно получить все атрибуты, которые существуют в моем магазине Prestahop, независимо от того, какой или какой продукт назначен. Я просто хочу создать массив этих атрибутов, а затем использовать их в классе ProductController.php. Я проверяю файл classs/Product.php и метод getDefaultAttribute($id_product, $minimumQuantity = 0) присутствует, но я думаю, что это работает только для атрибутов, назначенных конкретному продукту, а не возвращает все, что мне нужно. Любая помощь? Я новичок в Prestashop, и мне нужно многому научиться.


person ReynierPM    schedule 16.10.2012    source источник


Ответы (2)


Изучите файл classes/Attribute.php. Вы можете использовать статическую функцию Attribute::getAttributes($id_lang, $not_null = false). Он возвращает все атрибуты для данного языка.

person Alexander Simonchik    schedule 16.10.2012
comment
Спасибо @alexander-simonchik после того, как увидел код, который я использую, сделанный мной $query_attributes = "SELECT ps_al.name FROM " . _DB_PREFIX_ . "attribute_lang ps_al LEFT JOIN " . _DB_PREFIX_ . "attribute_group_lang ps_agl ON (ps_al.id_lang = ps_agl.id_lang) LEFT JOIN " . _DB_PREFIX_ . "attribute ps_a ON (ps_a.id_attribute_group = ps_agl.id_lang) WHERE ps_al.id_lang = " . (int) Configuration::get('PS_LANG_DEFAULT'); $attributes = Db::getInstance()->ExecuteS($query_attributes); $existent_attributes = array(); foreach($attributes as $attr) { $existent_attributes[] = $attr['name']; } - person ReynierPM; 16.10.2012

Вы можете получить все атрибуты, используя этот SQL-запрос:

$atbt = "SELECT a.id_attribute_group , a.name 
              FROM  " . _DB_PREFIX_ . "attribute_group_lang a                   
              where id_lang='".$id_lang."'";
    $res = Db::getInstance()->ExecuteS($atbt);
    $product_result = array();
    $i=0;
    foreach ($res as $key => $row) {
     $sql = 'SELECT pal.name AS label,pal.id_attribute AS value,0 AS status' 
                . ' FROM ' . _DB_PREFIX_ . 'attribute AS pa
        RIGHT  JOIN ' . _DB_PREFIX_ . 'attribute_group_lang AS pagl ON (pagl.id_attribute_group =pa.id_attribute_group)
        LEFT JOIN ' . _DB_PREFIX_ . 'attribute_lang AS pal ON (pal.id_attribute =pa.id_attribute)
        JOIN ' . _DB_PREFIX_ . 'product_attribute_combination  AS pacl ON (pacl.id_attribute =pal.id_attribute)
        JOIN ' . _DB_PREFIX_ . 'product_attribute  AS pat ON (pat.id_product_attribute =pacl.id_product_attribute)
        JOIN ' . _DB_PREFIX_ . 'product  AS prot ON (prot.id_product =pat.id_product)
        WHERE pagl.id_lang="'.$id_lang.'" AND pal.id_lang="'.$id_lang.'" AND pagl.id_attribute_group=' . $row['id_attribute_group'].' AND prot.id_category_default = "'.$id_category.'" GROUP BY pacl.id_attribute';

        $result = Db::getInstance()->ExecuteS($sql);
}
person Jeeva Chezhiyan    schedule 16.11.2016
comment
Хотя этот фрагмент кода может решить проблему, включение объяснения действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, а не только того, кто задает сейчас! Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение и указать, какие ограничения и предположения применяются. - person Toby Speight; 16.11.2016