+ Antworten
Ergebnis 1 bis 4 von 4

Thema: Erstes Plugin Problem mit Suchfunktion

  1. #1
    NTM
    NTM ist offline
    Verbringt hier viel Zeit
    Registriert seit
    08.04.2008
    Ort
    Düsseldorf
    Alter
    45
    Beiträge
    770
    Bedankte sich
    158
    Erhielt 64 Danksagungen
    in 64 Beiträgen

    Standard Erstes Plugin Problem mit Suchfunktion

    Hallo zusammen,
    ich schreibe gearde mein erstes Plug in als Suchfunktion nur leider klappt es nicht so wie ich es will. Kann mir jemand vielleicht weiter helfen. Ich bekomme immer wieder folgende Meldung.

    Warning: Invalid argument supplied for foreach() in /xxx/xx/htdocs/pizza/plugins/search/pizza.php on line 87

    Anbei der Code:
    Code:
    <?php
    // no direct access
    defined( '_JEXEC' ) or die( 'Restricted access' );
    
    $mainframe->registerEvent( 'onSearch', 'plgSearchPizza' );
    $mainframe->registerEvent( 'onSearchAreas', 'plgSearchPizzaAreas' );
    
    /**
     * @return array An array of search areas
     */
    function &plgSearchPizzaAreas() {
    	static $areas = array(
    		'pizza' => 'Pizza'
    	);
    	return $areas;
    }
    
    
    function plgSearchPizza( $text, $phrase='', $ordering='', $areas=null )
    {
    	$db		=& JFactory::getDBO();
    	$user	=& JFactory::getUser();
    
    	if (is_array( $areas )) {
    		if (!array_intersect( $areas, array_keys( plgSearchPizzaAreas() ) )) {
    			return array();
    		}
    	}
    
    	// load plugin params info
     	$plugin =& JPluginHelper::getPlugin('search', 'pizza');
     	$pluginParams = new JParameter( $plugin->params );
    
    	$limit = $pluginParams->def( 'search_limit', 50 );
    
    	$text = trim( $text );
    	if ($text == '') {
    		return array();
    	}
    	$section 	= JText::_( 'Pizza' );
    
    	$wheres 	= array();
    	switch ($phrase) 
    	{
    		case 'exact':
    			$text = $db->getEscaped($text);
    			$wheres2 	= array();
    			$wheres2[] 	= "LOWER(a.text) LIKE '%$text%'";
    			$wheres2[] 	= "LOWER(a.pizza) LIKE '%$text%'";
    			$where 		= '(' . implode( ') OR (', $wheres2 ) . ')';
    			break;
    
    		case 'all':
    		case 'any':
    		default:
    			$words 	= explode( ' ', $text );
    			$wheres = array();
    			foreach ($words as $word) {
    				$word = $db->getEscaped($word);
    				$wheres2 	= array();
    				$wheres2[] 	= "LOWER(a.text) LIKE '%$word%'";
    				$wheres2[] 	= "LOWER(a.pizza) LIKE '%$word%'";
    				$wheres[] 	= implode( ' OR ', $wheres2 );
    			}
    			$where 	= '(' . implode( ($phrase == 'all' ? ') AND (' : ') OR ('), $wheres ) . ')';
    			break;
    	}
    
    	switch ( $ordering ) 
    	{
    		default:
    			$order = 'a.text ASC';
    			break;
    
    	}
    
    	$query = "SELECT * FROM #__pizza AS a"
             . "\n WHERE ( $where )"
             . "\n AND published = '1'"
             . "\n ORDER BY $order";
    	;
    	
    	//echo $query; die();
    	$db->setQuery( $query, 0, $limit );
    	$rows = $db->loadObjectList();
    	
    	foreach($rows as $key => $row) {
    		$rows[$key]->href = 'index.php?option=com_pizza&view=pizza';
    	}
    
    	return $rows;
    }
    ?>
    Danke für eure Hilfe

  2. #2
    Hat hier eine Zweitwohnung Avatar von JoomDesign
    Registriert seit
    19.03.2006
    Ort
    Berlin, Deutschland
    Beiträge
    1.931
    Bedankte sich
    270
    Erhielt 599 Danksagungen
    in 513 Beiträgen

    Standard

    Zitat Zitat von NTM Beitrag anzeigen
    Warning: Invalid argument supplied for foreach() in /xxx/xx/htdocs/pizza/plugins/search/pizza.php on line 87
    Die Fehlermeldung besagt, dein Array oder Object ist leer oder nicht definiert!

    Welche ist denn die Zeile 87?

    PHP-Code:
    foreach ($words as $word) { 
    oder
    PHP-Code:
    foreach($rows as $key => $row) { 
    Gibt mal vor der Schleife print_r($words)
    oder eben print_r($rows) und ein Exit rein und sehe ob Du überhaupt Daten hast für die Schleife.
    also z.B.
    PHP-Code:
    print_r($rows);
    exit; 
    Gruß
    Marcel

  3. #3
    NTM
    NTM ist offline
    Verbringt hier viel Zeit
    Registriert seit
    08.04.2008
    Ort
    Düsseldorf
    Alter
    45
    Beiträge
    770
    Bedankte sich
    158
    Erhielt 64 Danksagungen
    in 64 Beiträgen

    Standard

    es ist die Zeile
    Code:
    foreach($rows as $key => $row) {
    wenn ich jetzt vor der Schleife eintrage
    Code:
    print_r($rows);
    exit;
    bekomme ich eine weisse Seite.

  4. #4
    Hat hier eine Zweitwohnung
    Registriert seit
    24.01.2006
    Beiträge
    1.010
    Bedankte sich
    156
    Erhielt 706 Danksagungen
    in 377 Beiträgen

    Standard

    Beim Programmieren immer den Debug Modus in Joomla! einschalten, dann wirst du eine schöne Fehlermeldung bekommen.

    Ansonsten ist deine Art Plugins zu basteln veraltet. Du solltest das obejktorientiert programmieren.

+ Antworten

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein