2015-12-18 4 views
12

Ciao Ho installato il componente jbusinessdirectory per joomla, e ho il modulo chiamato mod_jbusinessdirectory (questo è un modulo di ricerca per la scheda di attività commerciale) nel file tmpl/default.php I hanno selezionare il codice: (vedi sotto)Seleziona logicamente le categorie e le sottocategorie (php, joomla, javascript, ajax)

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

Da questo codice ottengo categorie e sottocategorie in questo modo:

  • categoria principale 1
  • sottocategoria 1 sottocategoria 2 subcateg ORY 3

  • Categoria principale 2

  • sottocategoria 1 sottocategoria 2 sottocategoria 3

screenshot qui: categories and sub categories screenshot

In helper.php Ho funzioni che ottengono le categorie e sottocategorie dal database

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

E infine in modjbusinesdirectory il file .php Ho il PHP in questo modo:

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

categorie e sottocategorie struttura della tabella screenshot here

La mia domanda è: come faccio a fare due query di selezione invece di uno. Dove nella prima query ottengo le categorie principali e nella seconda query ottengo le sottocategorie (ad esempio: se scelgo dalla prima query i libri della categoria principale e nella seconda query scelgo i bambini deve mostrare solo i libri con la sottocategoria libri per bambini).

+0

il tuo inglese va bene, signore, solo un paio di errori di ortografia, ma ho capito cosa intendevi e li hai corretti. Inoltre hai provato a mettere il risultato della prima query in una variabile e con la seconda query per esempio i libri. 'SELEZIONA le colonne necessarie FROM tablename WHERE MainCategoryColumn = $ MainCategoryVariable AND SubcategoryColumn = $ inputVariable' – BRoebie

+0

Grazie per la risposta, ma sono principiante in php e non capisco cosa intendi –

+0

Maincategory e sottocategoria hanno una colonna, ma I have parent_id column –

risposta

0

Sembra che il codice faccia già ciò che si desidera. Volete 2 query e ce ne sono 2. Ma, penso che il risultato di queste 2 query si combini in 1 risultato e volete mantenerlo in 2 risultati.

Sarà necessario aggiungere nuove funzioni di categoria che accettano i parametri ID categoria.

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

non ho familiarità con il codice di Joomla che recupera i parametri ma è possibile trovare l'ID se inviate un messaggio quando qualcuno seleziona una categoria principale.

<?php 
if($params->get('showCategories')){ 
    $categoryId = (int) $params->get('mainCategory'); 
    $category = modJBusinessDirectoryHelper::getCategoriesById($categoryId); 

    $subCategories = modJBusinessDirectoryHelper::getChildCategoryList($categoryId); 
    } 
} 
Problemi correlati