Мне нужно получить все атрибуты, которые существуют в моем магазине Prestahop, независимо от того, какой или какой продукт назначен. Я просто хочу создать массив этих атрибутов, а затем использовать их в классе ProductController.php. Я проверяю файл classs/Product.php и метод getDefaultAttribute($id_product, $minimumQuantity = 0) присутствует, но я думаю, что это работает только для атрибутов, назначенных конкретному продукту, а не возвращает все, что мне нужно. Любая помощь? Я новичок в Prestashop, и мне нужно многому научиться.
как получить все атрибуты в prestashop
Ответы (2)
Изучите файл classes/Attribute.php
. Вы можете использовать статическую функцию Attribute::getAttributes($id_lang, $not_null = false)
. Он возвращает все атрибуты для данного языка.
person
Alexander Simonchik
schedule
16.10.2012
Спасибо @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
Хотя этот фрагмент кода может решить проблему, включение объяснения действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, а не только того, кто задает сейчас! Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение и указать, какие ограничения и предположения применяются.
- person Toby Speight; 16.11.2016