Логически выберите категории и подкатегории (php, joomla, javascript, ajax)
Здравствуйте, я установил компонент jbusinessdirectory для joomla, и у меня есть модуль с именем mod_jbusinessdirectory (это модуль поиска для ведения бизнеса) в файле tmpl/default.php. Я выбрал код: (см. ниже)
<?php if($params->get('showCategories')){ ?>
<div class="select">
<div class="categoryic"></div>
<select name="categorySearch" class="select-styled" id="categories">
<option value="0">category</option>
<?php foreach($categories as $category){?>
<option value="<?php echo $category->id?>" <?php echo $session->get('categorySearch')==$category->id && $preserve?" selected ":"" ?> ><?php echo $category->name?></option>
<?php if(!empty($category->subcategories)){?>
<?php foreach($category->subcategories as $subCat){?>
<option value="<?php echo $subCat->id?>" <?php echo $session->get('categorySearch')==$subCat->id && $preserve?" selected ":"" ?> >-- <?php echo $subCat->name?></option>
<?php }?>
<?php }?>
<?php }?>
</select>
</div>
<?php }?>
Из этого кода я получаю категории и подкатегории, подобные этому:
снимок экрана здесь: категории и подкатегории скриншот
В helper.php у меня есть функции, которые получают категории и подкатегории из базы данных
static function getMainCategories(){
$db = JFactory::getDBO();
$query = ' SELECT * FROM #__jbusinessdirectory_categories where parent_id=1 and published=1 order by name';
$db->setQuery($query);
return $db->loadObjectList();
}
static function getSubCategories(){
$db = JFactory::getDBO();
$query = ' SELECT c.* FROM #__jbusinessdirectory_categories c
inner join #__jbusinessdirectory_categories cc on c.parent_id = cc.id where c.parent_id!=1 and cc.parent_id = 1 and c.published=1
order by c.name';
$db->setQuery($query,0,1000);
$result = $db->loadObjectList();
return $result;
}
И, наконец, в файле modjbusinesdirectory.php у меня есть PHP следующим образом:
if($params->get('showCategories')){
$categories = modJBusinessDirectoryHelper::getMainCategories();
if($params->get('showSubCategories')){
$subCategories = modJBusinessDirectoryHelper::getSubCategories();
foreach($categories as $category){
foreach($subCategories as $subCat){
if($category->id == $subCat->parent_id){
if(!isset($category->subcategories)){
$category->subcategories = array();
}
$category->subcategories[] = $subCat;
}
}
}
}
}
категории и подкатегории скриншот структуры таблицы
здесь
Мой вопрос: как мне сделать два запроса, а не один. Где в первом запросе я получаю основные категории, а во втором запросе получаю подкатегории (например: если я выбираю из первого запроса книги основной категории, а во втором запросе выбираю детей, он должен показывать только книги с подкатегорией детские книги).
Ответы
Ответ 1
Похоже, что код уже делает то, что вы хотите. Вы хотите 2 запроса, а их 2. Но я думаю, что результат этих двух запросов объединяется в 1 результат, и вы хотите, чтобы он плюнул на 2 результата.
Вам нужно будет добавить новые функции категории, которые принимают параметры идентификатора категории.
<?php
static function getCategoryById($id){
$id = intval( $id );
$db = JFactory::getDBO();
$query = '
SELECT *
FROM #__jbusinessdirectory_categories
WHERE
published=1
AND id= '.$id;
$db->setQuery($query);
return $db->loadObject();
}
static function getChildCategoryList($id){
$id = intval($id);
$db = JFactory::getDBO();
$query = '
SELECT c.*
FROM #__jbusinessdirectory_categories c
INNER JOIN #__jbusinessdirectory_categories cc
ON c.parent_id = cc.id
WHERE c.parent_id!=1
AND cc.id = '.$id.'
AND c.published=1
ORDER BY c.name';
$db->setQuery($query,0,1000);
$result = $db->loadObjectList();
return $result;
}
Я не знаком с кодом Joomla, который извлекает параметры, но вы можете найти идентификатор, если вы его отправляете, когда кто-то выбирает основную категорию.
<?php
if($params->get('showCategories')){
$categoryId = (int) $params->get('mainCategory');
$category = modJBusinessDirectoryHelper::getCategoriesById($categoryId);
$subCategories = modJBusinessDirectoryHelper::getChildCategoryList($categoryId);
}
}