Я разрабатываю сайт под prestashop и блокирую одну вещь.Я добавил в prestashop возможность выбора групп для поставщиков.Каждый пользователь имеет право присоединиться к одной или нескольким группам, и я пытаюсь отобразить только общих поставщиков, которых они объединяют.
Я создал таблицу supplier_group, поэтому мне нужно привязать каждого поставщика к одной или нескольким группам, чтобыдалеко все работает.Однако, когда я нахожусь с пользователем, который собирается делать крысы в AI группы, я должен видеть только провайдеров, которые также являются ratacher для группы A. И вот где я застреваю.
Я хотел бы изменить это отображение иЯ думаю, что я делаю это в этой функции:
public static function getSuppliers($get_nb_products = false, $id_lang = 0, $active = true, $p = false, $n = false, $all_groups = false)
{
if (!$id_lang) {
$id_lang = Configuration::get('PS_LANG_DEFAULT');
}
if (!Group::isFeatureActive()) {
$all_groups = true;
}
$query = new DbQuery();
$query->select('s.*, sl.`description`');
$query->from('supplier', 's');
$query->leftJoin('supplier_lang', 'sl', 's.`id_supplier` = sl.`id_supplier` AND sl.`id_lang` = '.(int)$id_lang);
$query->join(Shop::addSqlAssociation('supplier', 's'));
if ($active) {
$query->where('s.`active` = 1');
}
$query->orderBy(' s.`name` ASC');
$query->limit($n, ($p - 1) * $n);
$query->groupBy('s.id_supplier');
$suppliers = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($query);
if ($suppliers === false) {
return false;
}
if ($get_nb_products) {
$sql_groups = '';
if (!$all_groups) {
$groups = FrontController::getCurrentCustomerGroups();
$sql_groups = (count($groups) ? 'IN ('.implode(',', $groups).')' : '= 1');
}
$results = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
SELECT ps.`id_supplier`, COUNT(DISTINCT ps.`id_product`) as nb_products
FROM `'._DB_PREFIX_.'product_supplier` ps
JOIN `'._DB_PREFIX_.'product` p ON (ps.`id_product`= p.`id_product`)
'.Shop::addSqlAssociation('product', 'p').'
LEFT JOIN `'._DB_PREFIX_.'supplier` as m ON (m.`id_supplier`= p.`id_supplier`)
WHERE ps.id_product_attribute = 0'.
($active ? ' AND product_shop.`active` = 1' : '').
' AND product_shop.`visibility` NOT IN ("none")'.
($all_groups ? '' :'
AND ps.`id_product` IN (
SELECT cp.`id_product`
FROM `'._DB_PREFIX_.'category_group` cg
LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON (cp.`id_category` = cg.`id_category`)
WHERE cg.`id_group` '.$sql_groups.'
)').'
GROUP BY ps.`id_supplier`'
);
$counts = array();
foreach ($results as $result) {
$counts[(int)$result['id_supplier']] = (int)$result['nb_products'];
}
if (count($counts) && is_array($suppliers)) {
foreach ($suppliers as $key => $supplier) {
if (isset($counts[(int)$supplier['id_supplier']])) {
$suppliers[$key]['nb_products'] = $counts[(int)$supplier['id_supplier']];
} else {
$suppliers[$key]['nb_products'] = 0;
}
}
}
}
$nb_suppliers = count($suppliers);
$rewrite_settings = (int)Configuration::get('PS_REWRITING_SETTINGS');
for ($i = 0; $i < $nb_suppliers; $i++) {
$suppliers[$i]['link_rewrite'] = ($rewrite_settings ? Tools::link_rewrite($suppliers[$i]['name']) : 0);
}
return $suppliers;
}
Но я не вижу, как это сделать.У вас есть идея?
Спасибо за вашу помощь.