script insertar extensions easy custom code javascript php mysql ajax joomla

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; } }