insertar - Seleccionar lógicamente categorías y subcategorías(php, joomla, javascript, ajax)
insertar script en joomla 3 (2)
Hola, he instalado el componente jbusinessdirectory para joomla y tengo un módulo llamado mod_jbusinessdirectory (este es un módulo de búsqueda para listado de empresas) en el archivo 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 }?>
De este código obtengo categorías y subcategorías como esta:
- Categoría principal 1
subcategoría 1 subcategoría 2 subcategoría 3
Categoría principal 2
- subcategoría 1 subcategoría 2 subcategoría 3
captura de pantalla aquí: categorías y subcategorías captura de pantalla
En helper.php tengo funciones que obtienen categorías y subcategorías de la base de datos
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;
}
Y por último en el archivo modjbusinesdirectory.php tengo el PHP así:
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;
}
}
}
}
}
Estructura de tabla de categorías y subcategorías captura de pantalla here
Mi pregunta es: ¿Cómo hago dos consultas selectas en lugar de una? Donde en la primera consulta obtengo las categorías principales y en la segunda consulta obtengo las subcategorías (por ejemplo: si elijo de la primera consulta, los libros de la categoría principal y en la segunda consulta elijo niños, tiene que mostrar solo libros con la subcategoría libros infantiles).
Parece que el código ya hace lo que quieres. Quiere 2 consultas y hay 2. Pero creo que el resultado de estas 2 consultas se combina en 1 resultado y desea mantenerlo en 2 resultados.
Tendrá que agregar nuevas funciones de categoría que acepten parámetros de ID de categoría.
<?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;
}
No estoy familiarizado con el código de Joomla que recupera los parámetros, pero puede encontrar el ID si lo POSTRA cuando alguien selecciona una categoría principal.
<?php
if($params->get(''showCategories'')){
$categoryId = (int) $params->get(''mainCategory'');
$category = modJBusinessDirectoryHelper::getCategoriesById($categoryId);
$subCategories = modJBusinessDirectoryHelper::getChildCategoryList($categoryId);
}
}
Puede utilizar la siguiente consulta para obtener categorías.
function all_cat($id='''',$child_of_child=''parent'')
{
$CI =& get_instance();
if($id="")
{
$query = $CI->db->get_where("__jbusinessdirectory_categories",array(''parent_id''=>1));
}
else
{
$query = $CI->db->get_where("__jbusinessdirectory_categories",array(''parent_id''=>$id));
}
//echo $CI->db->last_query()."<br>";
$op = '''';
if($query->num_rows() > 0)
{
$res = $query->result();
//pr($res);
if($child_of_child == ''child'')
{
$op .= ''<ul class="sub_cat mrg-top-5" style="display:none;" id="''.$id.''">'';
}
else
{
$op .= ''<ul class="sub_cat " id="''.$id.''">'';
}
foreach($res as $r)
{
$op .= ''<li><a href="''.site_url(''category/search/9/1V1/''.$r->id).''" class="temp">''.ucwords($r->name).''</a>
</li>'';
$op .= all_cat($r->id,$child_of_child=''child'');
}
return $op .= ''</ul>'';
}
else
{
return $op;
}
}