[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
RexSearch Suche im Benutzerbereich/Kategorien aussperren - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Popkultur
Beiträge: 82
Registriert: 1. Apr 2014, 19:55

RexSearch Suche im Benutzerbereich/Kategorien aussperren

23. Jul 2015, 11:37

Hallo,

ich bekomme bei dem Code hier die Meldung:
Fatal error: Call to a member function getParentTree() on null in /kunden/235347_96450/xxx/195/207/webseiten/xxx.de-rex4.6.1/redaxo/include/classes/class.rex_article.inc.php(126) : eval()'d code on line 61
Die Funktion vollführt eine Suche, und zeigt die Dateien an/nicht an, die im geschlossenen Benutzerbereich/geschlossenem Dateibereich sind.

Der Punkt ist: Es funktioniert "meistens". Für manche Suchvorgänge allerdings nicht. Und es ist mir ein Rätsel, wieso. Eingesetzt mit TVSFEUser, aber sicher anpassbar für andere Module.

Code: Alles auswählen

ini_set('display_errors', 1);
	$closed_id_mediapool = 79;
	$closed_id_category = 155;
    define('SHOWMAX',10);

	if (!isset ($_SESSION)) {
		session_start();
	}			
	$rechte = explode(",", $_SESSION['tvsfeuser']['feuser']['rights']);

  if(!empty($_REQUEST['rexsearch'])) {
	$rexsearch = new RexSearch(REX_CLANG_ID);

    $result = $rexsearch->search($_REQUEST['rexsearch']);
    /*if(count($result['simwords']) > 0) {
      $newsearchString = $result['simwordsnewsearch'];
      $result = $rexsearch->search($newsearchString);
      if($result['count'] > 0)
        echo '<p>Meinten Sie <strong>'.$newsearchString.'</strong>?</p>';
    }*/
	//echo $result['sql'];
	// Filtern ob Ergebnisse für eingeloggte Besucher gezeigt werden oder nicht.
	
	//echo count($result['hits']);
	//print_r($result['hits']);
	//if(count($result['hits']) > 0) {


      foreach($result['hits'] as $i => $hit) {
		if (($hit['type'] == 'file')) { //  AND $hit['fileext'] == 'pdf'
		  $filename = explode('/', $hit['filename']);
          $pdf = OOMedia::getMediaByFileName($filename[count($filename)-1]);
		  //print_r( $pdf); echo ' '.$i.' ';
		  $c = OOMediaCategory::getCategoryById($pdf->getCategoryId());
		  $c = explode('|', $c->getPath());
		  //print_r($c);
		  if ($c[1] == $closed_id_mediapool) { $closed = true; } else { $closed = false; }
		  
		  if (!in_array($closed_id_category, $rechte) && ($closed)) { unset($result['hits'][$i]); };
		  // if (in_array('155', $rechte) && (!$closed)) { unset($result['hits'][$i]); };
        } else {
  			$article = OOArticle::getArticleById($hit['fid']);
		  	$tree = $article->getParentTree();
		  	$closed = false;
		  	foreach($tree as $parent) { if($parent->getId() == $closed_id_category) { $closed = true; } }
		
		  if (!in_array($closed_id_category, $rechte) && ($closed)) { unset($result['hits'][$i]);  };
		  // if (in_array('155', $rechte) && (!$closed)) { unset($result['hits'][$i]); };

        }
      }
	//}


	$result['count'] = 0;
	foreach ($result['hits'] as $hit) {
		if (isset($hit)) { $newresult[] = $hit; $result['count']++; };	
	}
	$start = isset($_GET['start'])?intval($_GET['start']):0;	
    
	if($result['count'] > 0) {

      if (in_array($this->getValue(article_id), $rechte)) { 
	  	switch ($REX['CUR_CLANG']) {
			case 0:  echo '<p><strong>HINWEIS: Sie sind eingeloggt, ihnen werden zusätzliche Ergebnisse aus dem geschlossenen Bereich angezeigt.</strong></p>'; break;
			default: echo '<p><strong>HINT: Since you are logged it, you are shown additional results from the closed space.</strong></p>'; break;
		}
	  }

      // Pagination Block
      if($result['count'] > SHOWMAX) {
        $self = OOArticle::getArticleById(REX_ARTICLE_ID);
        echo '<ul id="searchpagination">';	
		for($i = 0; ($i*SHOWMAX) < $result['count']; $i++) {
          if(($i*SHOWMAX) == $start)
            echo '<li class="aktiv"><a href="'.$self->getUrl(array('rexsearch' => $_REQUEST['rexsearch'], 'start' => $i*SHOWMAX)).'">'.($i+1).'</a></li>';
          else
            echo '<li><a href="'.$self->getUrl(array('rexsearch' => $_REQUEST['rexsearch'], 'start' => $i*SHOWMAX)).'">'.($i+1).'</a></li>';
        }
        echo '</ul>';
      }


	  echo '<ul id="searchresults">';
      for ($i = $start; $i < ($start+SHOWMAX) && $i < ($result['count']); $i++) {
		if($newresult[$i]['type'] == 'db_column') {
          $text = $newresult[$i]['article_teaser'];
          if($newresult[$i]['table'] == $REX['TABLE_PREFIX'].'article')
            $newresult[$i]['fid'] = $newresult[$i]['values']['id'];
        } else {
          $text = $newresult[$i]['highlightedtext'];
        }

        if($newresult[$i]['type'] == 'file' ) { //AND $newresult[$i]['fileext'] == 'pdf'
          // PDF-Datei
        
		  $filename = explode('/', $newresult[$i]['filename']);
          $pdf = OOMedia::getMediaByFileName($filename[count($filename)-1]);
		  $c = OOMediaCategory::getCategoryById($pdf->getCategoryId());
		  $c = explode('|', $c->getPath());
		  if ($c[1] == $closed_id_mediapool) { $closed = true; } else { $closed = false; }        
		
		  $filename = explode('/', $newresult[$i]['filename']);
          $pdf = OOMedia::getMediaByFileName($filename[count($filename)-1]);

			  echo '    <li>
	      	<h4 class="filelink">'; if ($closed) {echo ''; }; echo '<a href="'.htmlspecialchars($pdf->getFullPath()).'">'.$pdf->getOrgFileName().'</a></h4>
	      	<p class="highlightedtext">'.$text.'</p>
		  	<p class="url"><a href="'.htmlspecialchars($pdf->getFullPath()).'">'.$REX['SERVER'].'files/'.$pdf->getOrgFileName().'</a></p>
	      	</li>';
        } else {
          // Artikel oder DB-Spalte aus der Artikel-Tabelle
          $article = OOArticle::getArticleById($newresult[$i]['fid']);
		  $tree = $article->getParentTree();

		  $closed = false;
		  foreach($tree as $parent) { if($parent->getId() == $closed_id_category) { $closed = true; } }

			  echo '    <li>
			  <h4>'; if ($closed) {echo ''; }; echo '<a href="'.htmlspecialchars($article->getUrl()).'">'.$article->getName().'</a></h4>
			  <p class="path">';
		  
			  foreach($tree as $parent) {
				  $articleName = $parent->getName();
				  if($articleName !=  $newresult[$i]['name']) {
					echo $articleName;
					echo ' / ';
				  }
			  }
	
			  echo '</p>
			  <p class="highlightedtext">'.$text.'</p>
			  <p class="url"><a href="'.htmlspecialchars($article->getUrl()).'">'.substr($REX['SERVER'], 0, strlen($REX['SERVER'])-1).rex_getUrl($newresult[$i]['fid'], $newresult[$i]['clang']).'</a></p>
			</li>';
        }
      }
      echo '</ul>';

      // Pagination Block
      if($result['count'] > SHOWMAX) {
        $self = OOArticle::getArticleById(REX_ARTICLE_ID);
        echo '<ul id="searchpagination">';	
		for($i = 0; ($i*SHOWMAX) < $result['count']; $i++) {
          if(($i*SHOWMAX) == $start)
            echo '<li class="aktiv"><a href="'.$self->getUrl(array('rexsearch' => $_REQUEST['rexsearch'], 'start' => $i*SHOWMAX)).'">'.($i+1).'</a></li>';
          else
            echo '<li><a href="'.$self->getUrl(array('rexsearch' => $_REQUEST['rexsearch'], 'start' => $i*SHOWMAX)).'">'.($i+1).'</a></li>';
        }
        echo '</ul>';
      }

    } else {
      echo '<em>Leider nichts gefunden.</em>';
    }
  }

Benutzeravatar
runstop64
Beiträge: 369
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: RexSearch Suche im Benutzerbereich/Kategorien aussperren

23. Jul 2015, 12:10

Hi,

ich würde an Deiner Stelle mal prüfen, wo du überall die Methode getParentTree nutzt und was du übergibst. Es kann nämlich passieren, dass OOArticle::getArticleById null statt eines Artikel-Objekts zurück gibt, dann ist da natürlich keine Methode vorhanden.
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

Popkultur
Beiträge: 82
Registriert: 1. Apr 2014, 19:55

Re: RexSearch Suche im Benutzerbereich/Kategorien aussperren

23. Jul 2015, 13:43

Es hat offenbar etwas mit verwaisten Dateien im Medienpool zu tun. Danke.

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: RexSearch Suche im Benutzerbereich/Kategorien aussperren

27. Jul 2015, 12:21

Hej,

wenn du ein Objekt erstellst, solltest du danach immer prüfen

Code: Alles auswählen

$media = OOMedia::getMediaByFileName();
if ($media instanceof OOMedia) {
    // Objekt existiert, Methoden können verwendet werden
}

$article = OOArticle::getArticleById($hit['fid']);
if ($article instanceof OOArticle) {
    // Objekt existiert, Methoden können verwendet werden
    $tree = $article->getParentTree();
} 
Bei der Suche kann es u.a. vorkommen, dass im Suchindex gelöschte Artikel vorhanden sind. Deshalb immer schön den Suchindex generieren lassen.

vg Thomas

Zurück zu „Allgemeines [R4]“