Back to top

Autore Topic: Aiuto - Sviluppo Plugin Search  (Letto 4972 volte)

Offline Shadaki

  • Nuovo arrivato
  • *
  • Post: 11
    • Mostra profilo
Aiuto - Sviluppo Plugin Search
« il: 19 Giu 2012, 10:15:58 »
Buongiorno, sto cercando di costruire un plugin da integrare al motore di ricerca già presente in Joomla!

Purtroppo, data la mia scarsa esperienza nella programmazione (sono un novello e per di più autodidatta), sto avendo non pochi problemi a far funzionare il plugin.
Ho preso "spunto" (ho copiato spudoratamente) da alcuni passaggi del plugin già esistente "Search - Contacts" e sono riuscito a far registrare a Joomla il plugin nel gruppo search (lo visualizzo dandogli un banale print_r ($this->searchareas);]), purtroppo però i miei successi si fermano qua. Sembra che il motore di ricerca di joomla vada a richiedere l'intervento solo ed esclusivamente dei plugin pre-esistenti, ignorando completamente il mio :/

C'è per caso qualcuno che sa dove posso aver sbagliato, o che sa come far funzionare sto benedetto plugin di ricerca?
A richiesta posso incollare il codice qua sul forum, per quanto sia molto sporco e pieno di prove.. :)

P.S.: ho anche provato a "ingannare" joomla sostituendo la query dentro il plugin Search - Contacts e sembra che joomla lanci la query al db, ma non restituisca nessun valore nell'array $rows.... bho?

Grazie anticipatamente a chiunque cerchi di aiutarmi :)

Offline Shadaki

  • Nuovo arrivato
  • *
  • Post: 11
    • Mostra profilo
Re:Aiuto - Sviluppo Plugin Search
« Risposta #1 il: 21 Giu 2012, 14:11:12 »
Nessuno saprebbe darmi un consiglio? :(

mau_develop

  • Visitatore
Re:Aiuto - Sviluppo Plugin Search
« Risposta #2 il: 21 Giu 2012, 16:29:53 »
...consigli ce ne sarebbero tanti, il tuo problema è che ci vuole qualcuno che te lo faccia o dedichi qualche oretta a spiegarti la programmazione php e il framework joomla..

...probabilmente è per questo che nessuno ti risponde...
--------------------------------
(sono un novello e per di più autodidatta)
----------------------------------

M.


Offline Shadaki

  • Nuovo arrivato
  • *
  • Post: 11
    • Mostra profilo
Re:Aiuto - Sviluppo Plugin Search
« Risposta #3 il: 21 Giu 2012, 16:39:25 »
Ciao mau_develop, grazie per la risposta!

Non pretendo un corso accelerato di php, ci mancherebbe, ma un topic o qualcosa dove dare un'occhiata sarebbe un ottimo aiuto per districarmi dal groviglio di codice :)

Ho studiato per conto mio le basi della programmazione php e il modello MVC di joomla, quello che mi manca ovviamente e' l'esperienza che purtroppo si aquisisce solo provando e provando! Sbaglio? :)

Grazie ancora!
Shadaki
« Ultima modifica: 21 Giu 2012, 16:41:28 da Shadaki »

mau_develop

  • Visitatore
Re:Aiuto - Sviluppo Plugin Search
« Risposta #4 il: 21 Giu 2012, 16:45:52 »
Sembra che il motore di ricerca di joomla vada a richiedere l'intervento solo ed esclusivamente dei plugin pre-esistenti, ignorando completamente il mio :/
-----------------------------------------------------
abilitato? .. si vero?

cmq un plugin non dovrebbe avere tanto codice, magari copia e incola il cod del tuo plugin usando i tag code così che si capisca qualcosa.

M.

tra parentesi... cosa vorresti vedere? il search non è solo un plugin c'è anche un modulo...
« Ultima modifica: 21 Giu 2012, 16:47:27 da mau_develop »

Offline Shadaki

  • Nuovo arrivato
  • *
  • Post: 11
    • Mostra profilo
Re:Aiuto - Sviluppo Plugin Search
« Risposta #5 il: 21 Giu 2012, 17:03:23 »
Sembra che il motore di ricerca di joomla vada a richiedere l'intervento solo ed esclusivamente dei plugin pre-esistenti, ignorando completamente il mio :/
-----------------------------------------------------
abilitato? .. si vero?

cmq un plugin non dovrebbe avere tanto codice, magari copia e incola il cod del tuo plugin usando i tag code così che si capisca qualcosa.

M.

tra parentesi... cosa vorresti vedere? il search non è solo un plugin c'è anche un modulo...

Si, ovviamente e' installato e abilitato :)
Ora purtroppo non sono a casa, appena arrivo mi adopero ad incollare il codice. Si so che il search si compone di un componente e di diversi plugin (che mi pare di aver inteso non sono nient'altro che query al db che restituiscono un insieme di valori in un array $rows che il model poi elaborerà).
Quello che non riesco a fare e' dare in pasto al model l'array $rows riempito... Non restituisce array vuoto, proprio non vuole interpellare il mio plugin!! Per quanto ripeto, stampando $this->searchareas il mio plugin compaia in quelli adibiti alla ricerca...!
Grazie nuovamente della tempestiva risposta, spero di non aver scritto troppe castronerie :)

Shadaki

Offline Shadaki

  • Nuovo arrivato
  • *
  • Post: 11
    • Mostra profilo
Re:Aiuto - Sviluppo Plugin Search
« Risposta #6 il: 21 Giu 2012, 18:20:40 »
Ecco come promesso il codice. Ho cercato di pulirlo (dei commenti e delle prove) per renderlo un po' più chiaro :)

Codice: [Seleziona]
<?php

// no direct access
defined('_JEXEC') or die;

/**
 * Users Search plugin - Shadaki
 */
class plgSearchUtenti extends JPlugin
{

    public function 
__construct(& $subject$config)
    {
        
parent::__construct($subject$config);
        
$this->loadLanguage();
    }

    function 
onContentSearchAreas()
    {
        static 
$areas = array(
            
'utenti' => 'Utenti'
        
);
        return 
$areas;
    }

    
/**
    * Users Search method
    *
    * The sql must return the following fields that are used in a common display
    * routine: href, title, section, created, text, browsernav
    * @param string Target search string
    * @param string matching option, exact|any|all
    * @param string ordering option, newest|oldest|popular|alpha|category
     */
    
function onContentSearch($text$phrase=''$ordering=''$areas=null)
    {
        
$db        JFactory::getDbo();
        
$app    JFactory::getApplication();
        
$user    JFactory::getUser();
        
$groups    implode(','$user->getAuthorisedViewLevels());

        if (
is_array($areas)) {
            if (!
array_intersect($areasarray_keys($this->onContentSearchAreas()))) {
                return array();
            }
        }

        
$sContent        $this->params->get('search_content',        1);
        
$sArchived        $this->params->get('search_archived',        1);
        
$limit            $this->params->def('search_limit',        50);
        
$state = array();
        if (
$sContent) {
            
$state[]=1;
        }
        if (
$sArchived) {
            
$state[]=2;
        }

        
$text trim($text);
        if (
$text == '') {
            return array();
        }

        
$section JText::_('Utenti');

        switch (
$ordering) {
            case 
'alpha':
                
$order 'a.name ASC';
                break;

            case 
'category':
                
$order 'c.title ASC, a.name ASC';
                break;

            case 
'popular':
            case 
'newest':
            case 
'oldest':
            default:
                
$order 'a.name DESC';
        }

        
$text    $db->Quote('%'.$db->escape($texttrue).'%'false);

        
$rows = array();
        if (!empty(
$state)) {
            
$query    $db->getQuery(true);

            
$query "SELECT `username` FROM `#__users` WHERE `username` = '" $text "';";

            
$db->setQuery($query0$limit);

            
$rows $db->loadObjectList();

            if (
$rows) {
                foreach(
$rows as $key => $row) {
                    
                    
$rows[$key]->text $row->title;
                    
//etc
                
}
            }
        }
        return 
$rows;
    }
}
?>

mau_develop

  • Visitatore
Re:Aiuto - Sviluppo Plugin Search
« Risposta #7 il: 21 Giu 2012, 19:09:05 »
non ha nessun senso quello che hai scritto... non è che sia giusto o sbagliato... non esiste.

M.

Offline Shadaki

  • Nuovo arrivato
  • *
  • Post: 11
    • Mostra profilo
Re:Aiuto - Sviluppo Plugin Search
« Risposta #8 il: 22 Giu 2012, 00:41:59 »
non ha nessun senso quello che hai scritto... non è che sia giusto o sbagliato... non esiste.

M.

Sinceramente speravo in qualcosa di più del 'hai scritto una marea di cazzate'...
Grazie ugualmente, cercherò di raccapezzarmici da solo.

Shadaki

mau_develop

  • Visitatore
Re:Aiuto - Sviluppo Plugin Search
« Risposta #9 il: 22 Giu 2012, 12:21:42 »
Sinceramente speravo in qualcosa di più del 'hai scritto una marea di cazzate'...
-------------------------------------------------------------------------------------------------------------
.. il problema è che non potevo correggere una cosa senza senso, potevo correggere degli errori

esempio, spiegami cos'è, perchè l'hai fatto e perchè su quel trigger e che array è   'utenti' => 'Utenti'...

Codice: [Seleziona]
function onContentSearchAreas()
    {
        static $areas = array(
            'utenti' => 'Utenti'
        );
        return $areas;
    }

poi... spiegami cosa servono tutti i parametri, le aree per poi fare una query su un user....

...ordinata per cose che in quella tabella manco esistono:
$order = 'c.title ASC, a.name ASC';

senza che te lo scriva io dimmi cosa posso fare di più e lo faccio volentieri.

M.
« Ultima modifica: 22 Giu 2012, 14:16:38 da mau_develop »

Offline Shadaki

  • Nuovo arrivato
  • *
  • Post: 11
    • Mostra profilo
Re:Aiuto - Sviluppo Plugin Search
« Risposta #10 il: 22 Giu 2012, 15:24:49 »
Sinceramente speravo in qualcosa di più del 'hai scritto una marea di cazzate'...
-------------------------------------------------------------------------------------------------------------
.. il problema è che non potevo correggere una cosa senza senso, potevo correggere degli errori

esempio, spiegami cos'è, perchè l'hai fatto e perchè su quel trigger e che array è   'utenti' => 'Utenti'...

Codice: [Seleziona]
function onContentSearchAreas()
    {
        static $areas = array(
            'utenti' => 'Utenti'
        );
        return $areas;
    }

poi... spiegami cosa servono tutti i parametri, le aree per poi fare una query su un user....

...ordinata per cose che in quella tabella manco esistono:
$order = 'c.title ASC, a.name ASC';

senza che te lo scriva io dimmi cosa posso fare di più e lo faccio volentieri.

M.

Il trigger dovrebbe servire a richiamare il linguaggio (se non ho capito male), che però non ho ancora scritto
ci sono inoltre alcune "parti" ancora non utilizzate/da modificare tipo l'ordinamento come giustamente hai notato.. il punto è che il model non sembra prendere in considerazione il plugin, per quanto mi sembra di aver utilizzato la giusta estensione di classe..
Codice: [Seleziona]
class plgSearchUtenti extends JPlugin

Offline Shadaki

  • Nuovo arrivato
  • *
  • Post: 11
    • Mostra profilo
Re:Aiuto - Sviluppo Plugin Search
« Risposta #11 il: 22 Giu 2012, 15:45:25 »
questo è quello riscritto "per bene":

Codice: [Seleziona]
<?php
// no direct access
defined('_JEXEC') or die;

class 
plgSearchUtenti extends JPlugin
{

    public function 
__construct(& $subject$config)
    {
        
parent::__construct($subject$config);
        
$this->loadLanguage();
    }

    function 
onContentSearchAreas()
    {
        static 
$areas = array(
            
'utenti' => 'Utenti'
        
);
        return 
$areas;
    }


    function 
onContentSearch($text$phrase=''$ordering=''$areas=null)
    {
        
$db        JFactory::getDbo();
        
$app    JFactory::getApplication();
        
$user    JFactory::getUser();
        
$groups    implode(','$user->getAuthorisedViewLevels());

        if (
is_array($areas)) {
            if (!
array_intersect($areasarray_keys($this->onContentSearchAreas()))) {
                return array();
            }
        }
        
$rows = array();
        
        
$query "SELECT `username` FROM `#__users` WHERE `username` = '" $text "';";
        
$db->setQuery($query);
        
$rows $db->loadObjectList();
        
        
        if (
$rows == null) { //RIMUOVERE, SOLO PER TEST ESECUZIONE QUERY
        
$rows ='ARRAY VUOTO';
        return 
$rows;
        } else {
        foreach(
$rows as $key => $row) {
                    
$rows[$key]->text $row->title
                    
//etc

                
}
        return 
$rows;
        }
    }
}
?>

mau_develop

  • Visitatore
Re:Aiuto - Sviluppo Plugin Search
« Risposta #12 il: 22 Giu 2012, 16:34:49 »
cosa serve?... cosa dovrebbe fare?

Codice: [Seleziona]
function onContentSearchAreas()
    {
        static $areas = array(
            'utenti' => 'Utenti'
        );
        return $areas;
    }


... e questa? cosa fa?
Codice: [Seleziona]
if (is_array($areas)) {
            if (!array_intersect($areas, array_keys($this->onContentSearchAreas()))) {
                return array();
            }
        }

visto la query non avrai mai un ObjectList, ma un unico risultato
Codice: [Seleziona]
$rows = $db->loadObjectList();
Codice: [Seleziona]
username` = '" . $text . "';";errore di sintassi... poi .. che cos'è quel parametro "text" da dove viene e cosa contiene?

Codice: [Seleziona]
return $rows; come dicevo sopra questo sarà un solo risultato e conterrà o non conterrà l'username (SELECT `username`)

...ammettendo che hai l'username...ora?
cioè un plugin fa qualcosa ad un determinato evento "core" poi devi farci tu qualcosa con ciò che lui restituisce, per questo esiste un modulo e/o un componente oppure nulla di questo, rimane "invisibile" e "fa qualcosa" col db ... tipico esempio di un contavisite

M.

Offline Shadaki

  • Nuovo arrivato
  • *
  • Post: 11
    • Mostra profilo
Re:Aiuto - Sviluppo Plugin Search
« Risposta #13 il: 22 Giu 2012, 16:42:24 »
Continuo nel lavoro (ci sto forse capendo qualcosa di più rispetto a prima).

Ora l'array $rows viene riempito correttamente, son passato quindi a modificare la view (view.html.php e default_results.php) in modo da far mostrare quello che voglio nel frontend. Sto anche pensando di far mostrare una miniatura dell'avatar (se si usa Community Builder) nei risultati di ricerca.

Appena termino la view, passo a integrare le variabili per la restrizione della ricerca.

incollo nuovamente il codice del plugin, ancora in fase di lavoro:

Codice: [Seleziona]
<?php
// no direct access
defined('_JEXEC') or die;

class 
plgSearchUtenti extends JPlugin
{

    public function 
__construct(& $subject$config)
    {
        
parent::__construct($subject$config);
        
$this->loadLanguage();
    }

    function 
onContentSearchAreas()
    {
        static 
$areas = array(
            
'utenti' => 'Utenti'
        
);
        return 
$areas;
    }


    function 
onContentSearch($text$phrase=''$ordering=''$areas=null)
    {
        
$db        JFactory::getDbo();
        
$app    JFactory::getApplication();
        
$user    JFactory::getUser();
        
$groups    implode(','$user->getAuthorisedViewLevels());

        if (
is_array($areas)) {
            if (!
array_intersect($areasarray_keys($this->onContentSearchAreas()))) {
                return array();
            }
        }
        
$rows = array();
        

        
        
$query "SELECT `username`, `registerDate`, `lastvisitDate`  FROM `#__users` WHERE `username` = '" $text "';";
        
$db->setQuery($query);
        
$rows $db->loadObjectList();
        
        
        if (
$rows == null) { //RIMUOVERE, SOLO PER TEST ESECUZIONE QUERY
            
$rows ='ARRAY VUOTO';
            return 
$rows;
        } else {
            foreach(
$rows as $key => $row) {

                    
$rows[$key]->href 'index.php/profilo-personale/userprofile/'.$row->username;
                    
$rows[$key]->registered $row->registerDate;
                    
$rows[$key]->lastvisit $row->lastvisitDate;
                    
$rows[$key]->text $row->username;

            }
        return 
$rows;
        }
    }
}
?>

Offline Shadaki

  • Nuovo arrivato
  • *
  • Post: 11
    • Mostra profilo
Re:Aiuto - Sviluppo Plugin Search
« Risposta #14 il: 22 Giu 2012, 16:47:48 »
Ciao mau_develop, grazie nuovamente per il tuo contributo :)

cosa serve?... cosa dovrebbe fare?

Codice: [Seleziona]
function onContentSearchAreas()
    {
        static $areas = array(
            'utenti' => 'Utenti'
        );
        return $areas;
    }
Questo se non ho capito male, mi servirà quando renderò il plugin multilingue, sostituendo 'Utenti'. Per ora fa coreografia :)

... e questa? cosa fa?
Codice: [Seleziona]
if (is_array($areas)) {
            if (!array_intersect($areas, array_keys($this->onContentSearchAreas()))) {
                return array();
            }
        }
Ok, lo ammetto, questa non l'ho capita tanto, ma mi sembra di intendere che abbia a che fare con la registrazione su $this delle aree di ricerca (era presente nel plugin Search - Contacts da cui ho preso spunto, e l'ho riportata paro paro sul mio).

visto la query non avrai mai un ObjectList, ma un unico risultato
Codice: [Seleziona]
$rows = $db->loadObjectList();
Ho modificato la query, la prima che ho postato era una mera "prova" :) ora estrae anche altro oltre al nome utente
Codice: [Seleziona]
username` = '" . $text . "';";errore di sintassi... poi .. che cos'è quel parametro "text" da dove viene e cosa contiene?
$text proviene dall'input di ricerca... no? :)
Codice: [Seleziona]
return $rows; come dicevo sopra questo sarà un solo risultato e conterrà o non conterrà l'username (SELECT `username`)

...ammettendo che hai l'username...ora?
cioè un plugin fa qualcosa ad un determinato evento "core" poi devi farci tu qualcosa con ciò che lui restituisce, per questo esiste un modulo e/o un componente oppure nulla di questo, rimane "invisibile" e "fa qualcosa" col db ... tipico esempio di un contavisite

M.
vedasi poco sotto...


Il plugin è in continua lavorazione, proprio perchè ci sono delle parti che ancora non ho lavorato e che in questo momento non fanno "nulla", se non riempire inutilmente il codice eheh. Le tengo per evitare di doverle riscrivere in caso ne avessi bisogno. Nel caso invece si rivelassero poi inutili per i miei scopi, verranno rimosse successivamente. Ripeto, sono un novellino e mi risulta molto più facile lavorare così, che dover andare a vedere come riscrivere un determinato comando o funzione...capisco che per un esperto sia una perdita di tempo e anzi addirittura potenzialmente dannoso per il codice nell'insieme :)
« Ultima modifica: 22 Giu 2012, 16:55:31 da Shadaki »

 



Web Design Bolzano Kreatif