The Joomla! Forum ™



Forum rules


Forumregeln



Post new topic Reply to topic  [ 9 posts ] 
Author Message
 Post subject: MediaWiki Search Plugin
PostPosted: Thu May 26, 2011 8:40 am 
User avatar
Joomla! Fledgling
Joomla! Fledgling

Joined: Thu May 26, 2011 8:33 am
Posts: 4
Hallo zusammen,

bin bin gerade dabei Joomla als Intranet einzurichten. Wir haben bereits Mediawiki im Einsatz und ich möchte gerne, dass bei der Suche immer beide durchsucht werden. Hierzu gibt es das obige Plugin (http://www.dosideas.com/mediawiki-searc ... oomla.html). Dies ist jedoch leider nur für Joomla 1.5. Kann mir jemand helfen und sagen wie und ob ich es in Jommla 1.6 nutzen kann?

Besten Dank schon mal im Voraus

Micha


Top
 Profile  
 
PostPosted: Mon May 30, 2011 9:05 am 
Joomla! Ace
Joomla! Ace

Joined: Sat Jan 21, 2006 8:42 pm
Posts: 1152
MichaZ wrote:
Kann mir jemand helfen und sagen wie und ob ich es in Jommla 1.6 nutzen kann?
Musste etwas Hand anlegen, .xml für 1.6 umschreiben und eventuell noch paar kleine Codeänderungen, danach kannste es auch in 1.6 verwenden.


Top
 Profile  
 
PostPosted: Mon May 30, 2011 9:19 am 
User avatar
Joomla! Fledgling
Joomla! Fledgling

Joined: Thu May 26, 2011 8:33 am
Posts: 4
Hallo Redeye,

danke schön, hab auch schon versucht das hinzubekommen, aber leider bisher ohne erfolg. Hast Du vielleicht einen Tipp wo genau der ode angepasst werden müsste? :-))

Danke schon mal.


Top
 Profile  
 
PostPosted: Mon May 30, 2011 9:26 am 
Joomla! Ace
Joomla! Ace

Joined: Sat Jan 21, 2006 8:42 pm
Posts: 1152
Ohne das Plugin betrachtet zu haben, ne sry^^
Frage vorweg: .xml Datei vom plugin hast du angepasst und install unter 1.6 geht? oder hängt es auch hier noch


Top
 Profile  
 
PostPosted: Mon May 30, 2011 9:53 am 
Joomla! Ace
Joomla! Ace

Joined: Sat Jan 21, 2006 8:42 pm
Posts: 1152
Ich bins jetzt mal überflogen, hab den Code etwas geändert, alles was vor class WikiTextToHTML kommt müsstest du ändern.
Wie gesagt ich bins überflogen gerade, also keine Gewährleistung :D .xml musste selber noch anpassen, sollte kein Prob sein, dafür gibbet genug Beispiele, wenns net klappt meld dich wieder, ich bin aber jetzt erst mal unterwegs
Code:
// no direct access
defined('_JEXEC') or die;

jimport('joomla.plugin.plugin');

class plgSearchMediaWiki extends JPlugin
{
   public function onContentSearchAreas() {
      static $areas = array(
         'mediawiki' => 'Wiki'
      );
      return $areas;
   }

   function onContentSearch( $text, $phrase='', $ordering='', $areas=null )
   {
      $db = JFactory::getDBO();
      $user = JFactory::getUser();

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

      // load plugin params info
       $limit = $this->params->def('search_limit', 50);
       $searchResultsTitle = $this->params->get('search_results_title', 'Wiki');
      $mediawikiDatabase = $this->params->get('mediawiki_database', 'dosideas_mwiki');
      $mediawikiTablePrefix = $this->params->get('mediawiki_table_prefix', '');
      $mediawikiUrl = $this->params->get('mediawiki_url', '/wiki/index.php?title=');
       
      $text = trim( $text );
      if ($text == '') {
         return array();
      }

      switch ($ordering) {
         case 'newest':
            $order = 'page.page_touched DESC';
            break;
         case 'oldest':
            $order = 'page.page_touched ASC';
            break;
         default:
            $order = 'page.page_touched DESC';
            break;
      }

      $text = $db->getEscaped($text);
   
       $searchterm = '';
      switch ($phrase) {
          case 'any':
             $searchterm = $text;
             break;
          case 'all':
          default:
         $words = explode(' ', $text);
         foreach ($words as $word) {
             $searchterm .= '+'.$word.' ';              
         }
      }
   
       //This variables contains the names of the MediaWiki tables used in the SQL query
      $tablePage = '`'. $mediawikiDatabase . '`.' . $mediawikiTablePrefix . 'page';
      $tableSearchindex = '`'. $mediawikiDatabase . '`.' . $mediawikiTablePrefix . 'searchindex';
      $tableRevision = '`'. $mediawikiDatabase . '`.' . $mediawikiTablePrefix . 'revision';
      $tableText = '`'. $mediawikiDatabase . '`.' . $mediawikiTablePrefix . 'text';
   
       //About searching on MediaWiki tables:  http://www.mediawiki.org/wiki/Manual:Searchindex_table
      $query  = 'SELECT "2" AS browsernav, page.page_title as titleurl, REPLACE(page.page_title, "_", " ") as title, SUBSTRING(text.old_text, 1, 240) as description'
      .' FROM '.$tablePage.' AS page, '.$tableSearchindex.' AS searchindex, '.$tableRevision.' AS revision, '.$tableText.' AS text'
      .' WHERE page.page_id = searchindex.si_page'
      .' AND page.page_latest = revision.rev_id'
      .' AND revision.rev_text_id = text.old_id'
      .' AND page.page_namespace IN (0)'
      .' AND page.page_is_redirect = 0'
      .' AND (MATCH(searchindex.si_title) AGAINST("'.$searchterm.'" IN BOOLEAN MODE)'
      .'   OR MATCH(searchindex.si_text) AGAINST("'.$searchterm.'" IN BOOLEAN MODE)'
      .' ) ORDER BY '.$order
      ;
      
      $db->setQuery( $query, 0, $limit );
      $rows = $db->loadObjectList();
      $count = count( $rows );

      for ( $i = 0; $i < $count; $i++ )
      {   
         $wikitext = $rows[$i]->description;
         $wikitext .= "...";
         $input = explode("\n", $wikitext);            
         $output = WikiTextToHTML::convertWikiTextToHTML($input);
      
         $htmltext = '';
         foreach($output as $line) {
            $htmltext .= $line;
         }         

         $rows[$i]->href    = $mediawikiUrl . $rows[$i]->titleurl;
         $rows[$i]->section    = $searchResultsTitle;
         $rows[$i]->text    = $htmltext;
      }

      return $rows;
   }
}

edit: typo in code


Top
 Profile  
 
PostPosted: Tue May 31, 2011 6:34 am 
User avatar
Joomla! Fledgling
Joomla! Fledgling

Joined: Thu May 26, 2011 8:33 am
Posts: 4
Hallo,

habe den Code noch etwas modifiziert. Beim suchen erhalten ich jetzt keine Fehler und das Pulgin schein auch geladen zu werden. Ich erhalte jedoch keine Suchergebnisse auch dem Wiki. Anbei mein Code...

Jemand ne Idee?

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

$mainframe =& JFactory::getApplication();

$mainframe->registerEvent( 'onContentSearch', 'plgSearchMediaWiki' );
$mainframe->registerEvent( 'onContentSearchAreas', 'plgSearchMediaWikiAreas' );
   
function &plgSearchMediaWikiAreas() {
   static $areas = array(
      'mediawiki' => 'HoeraufWiki'
   );
   return $areas;
}

function plgSearchMediaWiki( $text, $phrase='', $ordering='', $areas=null ){
   //-------------------------------------------------------
   // Pre-processing
   //-------------------------------------------------------
   $mainframe   =& JFactory::getApplication();
   $db         =& JFactory::getDBO();
   $user      =& JFactory::getUser();
   $conf       =& JFactory::getConfig();
   
   if (is_array( $areas )) {
      if (!array_intersect( $areas, array_keys( plgSearchMediaWikiAreas() ) )) {
         return array();
      }
   }
   
   $searchText = $text;   

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


   // load plugin params info
   $plugin =& JPluginHelper::getPlugin('search', 'modules');
   $plg_params = new JRegistry;
   $plg_params->loadJSON($plugin->params);
    $limit = $plg_params->def('search_limit', 50);
    $searchResultsTitle = $plg_params->def('search_results_title', 'Wiki');
    $mediawikiDatabase = $plg_params->def('mediawiki_database', 'dosideas_mwiki');
    $mediawikiTablePrefix = $plg_params->def('mediawiki_table_prefix', '');
    $mediawikiUrl = $plg_params->def('mediawiki_url', '/wiki/index.php?title=');

    switch ($ordering) {
        case 'newest':
         $order = 'page.page_touched DESC';
         break;
        case 'oldest':
            $order = 'page.page_touched ASC';
            break;
        default:
            $order = 'page.page_touched DESC';
            break;
    }

    $text = $db->getEscaped($text);
   
    $searchterm = '';
    switch ($phrase) {
        case 'any':
             $searchterm = $text;
             break;
        case 'all':
        default:
        $words = explode(' ', $text);
        foreach ($words as $word) {
            $searchterm .= '+'.$word.' ';               
        }
    }
   
    //This variables contains the names of the MediaWiki tables used in the SQL query
    $tablePage = '`'. $mediawikiDatabase . '`.' . $mediawikiTablePrefix . 'page';
    $tableSearchindex = '`'. $mediawikiDatabase . '`.' . $mediawikiTablePrefix . 'searchindex';
    $tableRevision = '`'. $mediawikiDatabase . '`.' . $mediawikiTablePrefix . 'revision';
    $tableText = '`'. $mediawikiDatabase . '`.' . $mediawikiTablePrefix . 'text';
   
    //About searching on MediaWiki tables:  http://www.mediawiki.org/wiki/Manual:Searchindex_table
    $query  = 'SELECT "2" AS browsernav, page.page_title as titleurl, REPLACE(page.page_title, "_", " ") as title, SUBSTRING(text.old_text, 1, 240) as description'
    .' FROM '.$tablePage.' AS page, '.$tableSearchindex.' AS searchindex, '.$tableRevision.' AS revision, '.$tableText.' AS text'
    .' WHERE page.page_id = searchindex.si_page'
    .' AND page.page_latest = revision.rev_id'
    .' AND revision.rev_text_id = text.old_id'
    .' AND page.page_namespace IN (0)'
    .' AND page.page_is_redirect = 0'
    .' AND (MATCH(searchindex.si_title) AGAINST("'.$searchterm.'" IN BOOLEAN MODE)'
    .'   OR MATCH(searchindex.si_text) AGAINST("'.$searchterm.'" IN BOOLEAN MODE)'
    .' ) ORDER BY '.$order
    ;
     
    $db->setQuery( $query, 0, $limit );
    $rows = $db->loadObjectList();
    $count = count( $rows );

    for ( $i = 0; $i < $count; $i++ ) {   
        $wikitext = $rows[$i]->description;
        $wikitext .= "...";
        $input = explode("\n", $wikitext);           
        $output = WikiTextToHTML::convertWikiTextToHTML($input);
     
        $htmltext = '';
        foreach($output as $line) {
            $htmltext .= $line;
        }         

        $rows[$i]->href    = $mediawikiUrl . $rows[$i]->titleurl;
        $rows[$i]->section    = $searchResultsTitle;
        $rows[$i]->text    = $htmltext;
    }

    return $rows;
}


Top
 Profile  
 
PostPosted: Wed Jun 01, 2011 7:43 am 
Joomla! Ace
Joomla! Ace

Joined: Sat Jan 21, 2006 8:42 pm
Posts: 1152
Mein Ansatz hat dir ja nicht gefallen :pop


Top
 Profile  
 
PostPosted: Wed Jun 01, 2011 8:17 am 
User avatar
Joomla! Fledgling
Joomla! Fledgling

Joined: Thu May 26, 2011 8:33 am
Posts: 4
Hallo Redeye,

von nicht fallen kann keine Rede sein. Leider hat dieser ebenfalls nicht funktioniert. Ich habe in Deiner Zeile

$limit = $this->params->def('search_limit', 50);

ne Fehlermeldung erhalten. Deshalb mein Versuch die Sache noch mal anders anzugehen.

eine Fehlermeldung erhalten.


Top
 Profile  
 
PostPosted: Wed Jun 01, 2011 2:39 pm 
Joomla! Ace
Joomla! Ace

Joined: Sat Jan 21, 2006 8:42 pm
Posts: 1152
Wie sah der Fehler aus?
Wie geschrieben, ich bin nur drüber geflogen, find and replace, getestet hab ich nix.

$this->params->get('') sollte da keinen Fehler geben, im Grunde bräuchtest du die Params aber net, ist ja eh nur für dich, also kannste deine MediaWiki Eigenschaften auch direkt reinschreiben anstatt Params zu nehmen.
Auch wollte ich dir keinen komplett fertigen Code geben, dafür müsste ich Ihn ja testen, was bedeuten würde ich müsste mir auch MediaWiki installen...
Sollte nur nen Anhaltspunkt für dich sein wie es aussehen sollte.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 9 posts ] 



Who is online

Users browsing this forum: No registered users and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Jump to:  
Powered by phpBB® Forum Software © phpBB Group