ich bekomme bei dem Code hier die Meldung:
Die Funktion vollführt eine Suche, und zeigt die Dateien an/nicht an, die im geschlossenen Benutzerbereich/geschlossenem Dateibereich sind.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
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>';
}
}