Seite 2 von 5

Re: "Similar Topics" für Content-Seite

Verfasst: 09.06.2010 16:22
von uwe.ha
Ich habe schon andere keywords ausprobiert ... keine Ergebnisse ...

Re: "Similar Topics" für Content-Seite

Verfasst: 09.06.2010 16:43
von AmigaLink
LOL ok, ich weiss auch warum.
Die Abfrage wird gar nicht ausgeführt weil das Skript beendet wird wenn der Footer generiert wurde.

Code: Alles auswählen

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();

$keyword = 'rosen';

// Begin similar topics
$sql_array = array(
   'SELECT'   => 'f.forum_id, f.forum_name, t.topic_id, t.topic_title, u.user_id, u.username, u.user_colour, t.topic_replies',

   'FROM'      => array(
      TOPICS_TABLE   => 't',
   ),

   'LEFT_JOIN'   => array(
      array(
         'FROM'   =>   array(USERS_TABLE   => 'u'),
         'ON'   => 'u.user_id = t.topic_poster'
   ),
      array(
         'FROM'   =>   array(FORUMS_TABLE   => 'f'),
         'ON'   => 'f.forum_id = t.forum_id'
      ),
   ),

    'WHERE'      => "MATCH (t.topic_title) AGAINST ('" . $db->sql_escape($keyword) . "') >= 0.5
        AND t.topic_status <> " . ITEM_MOVED,

   'GROUP_BY'   => 't.topic_id',

   'ORDER_BY'   => 't.topic_last_post_time DESC'
);
$sql = $db->sql_build_query('SELECT', $sql_array);
if ($result = $db->sql_query_limit($sql, 5))
{
   while($similar = $db->sql_fetchrow($result))
   {
      if ($auth->acl_get('f_read', $similar['forum_id']))
      {
         $similar_forum_url   = append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=" . $similar['forum_id']);
         $similar_topic_url   = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=" . $similar['forum_id'] . '&t=' . $similar['topic_id']);
         $similar_user      = get_username_string('full', $similar['user_id'], $similar['username'], $similar['user_colour'], $similar['username']);

         $template->assign_block_vars('similar', array(
            'TOPIC_TITLE'         => $similar['topic_title'],
            'U_TOPIC'            => $similar_topic_url,
            'REPLIES'            => $similar['topic_replies'],
            'USER'               => $similar_user,
            'U_FORUM'            => $similar_forum_url,
            'FORUM'               => $similar['forum_name'])
         );
      }
   }
}
// End Similar Topics

// Page output
page_header($keyword);

$template->set_filenames(array(
    'body' => 'similar-content.html',
));

make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
page_footer();
?>
// EDIT

Und noch etwas. Für den Fall das es keine Threads zu dem Keyword gibt, wäre dieses Template ganz nett.

Code: Alles auswählen

<!-- INCLUDE overall_header.html -->
   <table class="tablebg" width="100%" cellspacing="1" cellpadding="0" style="margin-top:5px">
   <tr>
      <th colspan="3" align="left">{L_SIMILAR_TOPICS}</th>
   </tr>
   <!-- IF .similar -->
   <!-- BEGIN similar -->
   <tr><td class="row1"><a href="{similar.U_TOPIC}" class="topictitle">{similar.TOPIC_TITLE}</a></td>
      <td class="row2">{L_FORUM}: <a href="{similar.U_FORUM}">{similar.FORUM}</a></td>
      <td class="row1">{L_REPLIES}: {similar.REPLIES}</td>
   </tr>
   <!-- END similar -->
   <!-- ELSE -->
      <tr><td class="row1" colspan="3" align="center"><strong>{L_NO_POSTS}</strong></td></tr>
   <!-- ENDIF -->
   </table>
<!-- INCLUDE jumpbox.html -->
<!-- INCLUDE overall_footer.html -->
Oder alternativ das hier:

Code: Alles auswählen

<!-- INCLUDE overall_header.html -->
   <!-- IF .similar -->
   <table class="tablebg" width="100%" cellspacing="1" cellpadding="0" style="margin-top:5px">
   <tr>
      <th colspan="3" align="left">{L_SIMILAR_TOPICS}</th>
   </tr>
   <!-- BEGIN similar -->
   <tr><td class="row1"><a href="{similar.U_TOPIC}" class="topictitle">{similar.TOPIC_TITLE}</a></td>
      <td class="row2">{L_FORUM}: <a href="{similar.U_FORUM}">{similar.FORUM}</a></td>
      <td class="row1">{L_REPLIES}: {similar.REPLIES}</td>
   </tr>
   <!-- END similar -->
   </table>
   <!-- ENDIF -->
<!-- INCLUDE jumpbox.html -->
<!-- INCLUDE overall_footer.html -->

Re: "Similar Topics" für Content-Seite

Verfasst: 09.06.2010 17:01
von uwe.ha
:D :D :D GUTER MANN !!! :D :D :D

Hast dir ein Bierchen verdient ... eins ... nach dem anderen ;-)
Wenn du mal im Hunsrück bist (nähe Flughafen Frankfurt-Hahn) und was brauchst (z.B. kostenloser Parkplatz und Flughafentransfer, oder sonstwas) ... melde dich!

Jetzt muss ich die Tage nur noch hin bekommen, dass ich das Suchergebnis auch in einer Seite OHNE den header und footer von phpBB rein bekomme ... also in eine Seite mit dem header und footer meines redaktionellen Teil.

VIELEN DANK einstweilen!!!

Re: "Similar Topics" für Content-Seite

Verfasst: 09.06.2010 17:12
von AmigaLink
Danke für das Angebot, wer weiss wofür es mal gut ist. :)

Header, Footer und Jumpbox lassen sich einfach entfernen.
Dafür zuständig sind diese Befehle:
php:

Code: Alles auswählen

page_header($keyword);
make_jumpbox(append_sid("{$phpbb_root_path}viewforum.$phpEx"));
page_footer();
html:

Code: Alles auswählen

<!-- INCLUDE overall_header.html -->
<!-- INCLUDE jumpbox.html -->
<!-- INCLUDE overall_footer.html -->
Einfach weg und gut is. ;)

Einbinden in deinen Content lässt sich das ganze dann theoretisch mittels include. (Du hattest in dem anderem Thema ja erwähnt das dies bei dir möglich ist.)

Und wenn du dann noch

Code: Alles auswählen

$keyword = 'rosen';
gegen

Code: Alles auswählen

$keyword = utf8_normalize_nfc(request_var('keyword', '', true));
ersetzt, kannst du das Skript mittels similar.php?keyword=rosen aufrufen und musst somit nicht für jedes keyword ein eigenes Skript erstellen. :)

Re: "Similar Topics" für Content-Seite

Verfasst: 10.06.2010 10:03
von uwe.ha
Hallo ... da bin ich wieder ;-)

es scheint doch nicht ganz sooo einfach zu sein ...

Ich habe nun die o.g. "unnötigen" Zeilen (header, footer, jumpbox) entfernt, und die Datei similar.inc.php (wie ich sie nun nenne) per include in meine rosen.php eingefügt. Dabei habe ich den ROOT-PATH wie folgt angepasst:

Code: Alles auswählen

$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '/phpBB/';
, da die rosen.php außerhalb des phpBB-Ordners liegt. Sollte doch so richtig sein, oder?

Dann kommt aber die Fehlermeldung:

Code: Alles auswählen

Warning: include(/phpBB/common.php) [function.include]: failed to open stream: No such file or directory in /www/htdocs/xxx/phpBB/similar.inc.php  on line 6

Warning: include() [function.include]: Failed opening '/phpBB/common.php' for inclusion (include_path='.:/usr/share/php:..') in /www/htdocs/xxx/phpBB/similar.inc.php on line 6

Fatal error: Call to a member function session_begin() on a non-object in /www/htdocs/xxx/phpBB/similar.inc.php on line 9
Könnte es sein, dass sich die common.php - aus Sicherheitsgründen - nicht von außerhalb des Ordners phpBB aufrufen lässt? ... ich meine sowas mal gelesen zu haben.

Die Idee mit der Keywordübergabe ist sehr, sehr gut!
Wenn ich aber in der rosen.php einfüge:

Code: Alles auswählen

<?
include ($_SERVER['DOCUMENT_ROOT']."/phpBB/similar.inc.php?keyword=rosen")
?>
kommt die Fehlermeldung:

Code: Alles auswählen

Warning: include(/www/htdocs/xxx//phpBB/similar.inc.php?keyword=rosen) [function.include]: failed to open stream: No such file or directory in /www/htdocs/xxx/x

Warning: include() [function.include]: Failed opening '/www/htdocs/xxx//phpBB/similar.inc.php?keyword=rosen' for inclusion (include_path='.:/usr/share/php:..') in /www/htdocs/xxx/x
so als wenn diese Keywordübergabe im include-Befehl nicht funktionieren würde, oder?

DANKE!

Re: "Similar Topics" für Content-Seite

Verfasst: 10.06.2010 11:30
von AmigaLink
Die ganzen Fehlermeldungen besagen das er die zu includierenden Dateien nicht finden kann. Es stimmt also etwas in der geänderten Pfadangabe nicht.
Liegt die similar.inc.php im Root-Verzeichnis und das Forum in dem Unterordner phpBB ? Es sieht nicht so aus und macht auch nicht wirklich einen Sinn.

Re: "Similar Topics" für Content-Seite

Verfasst: 10.06.2010 12:40
von uwe.ha
Hallo Markus,

ja, die similar.inc.php liegt - genauso wie die common.php - im Root-Ordner /phpBB/
Das Forum selbst liegt - natürlich auch - in /phpBB/
Die rosen.php liegt in /blumen/rosen/

Wenn ich den root-path wie am Anfang - als es noch mit foren-header+footer funktioniert hat - lasse, also

Code: Alles auswählen

$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
, dann scheint er zumindest die common.php zu finden, denn er gibt folgende (Fehler)-Meldung aus:

Code: Alles auswählen

The config.php file could not be found.

Click here to install phpBB
, was Teil der common.php ist, siehein common.php um Zeile 126:

Code: Alles auswählen

if (!file_exists($phpbb_root_path . 'config.' . $phpEx))
{
	die("<p>The config.$phpEx file could not be found.</p><p><a href=\"{$phpbb_root_path}install/index.$phpEx\">Click here to install phpBB</a></p>");
}
Aber wenn er doch die common.php gefunden hat, warum findet er dann die config.php nicht mehr? :(

Re: "Similar Topics" für Content-Seite

Verfasst: 10.06.2010 13:36
von AmigaLink
Hmmm - das die common.php gefunden wird und die config.php nicht kann ich mir auch nicht erklären. :-?

Ich glaub da muss ich erst mal ein paar Stunden drüber Schlafen, ich bin nämlich schon seit 26 Stunden auf den Beinen.

Re: "Similar Topics" für Content-Seite

Verfasst: 10.06.2010 13:54
von uwe.ha
Dann "ab ins Körbchen" ... und träum die Lösung :D

Re: "Similar Topics" für Content-Seite

Verfasst: 10.06.2010 19:18
von AmigaLink
Sooo, jetzt denkt es sich besser. :D

Also das das die Übergabe des Keywords nicht funktioniert ist logisch weil das mittels include nicht geht.
Aber das die common.php gefunden wird und die config.php nicht kann ich mir immer noch nicht erklären. Logisch wäre es wenn beide nicht gefunden würden.
Es gibt aber selbstverständlich eine Lösung für das Problem. :geek:

Sie similar.inc.php liegt im Ordner /phpBB/
Die rosen.php liegt in /blumen/rosen/

In der similar.inc.php löschst du

Code: Alles auswählen

$keyword = 'rosen';
Und in der rosen.php machst du

Code: Alles auswählen

<?
define('PHPBB_ROOT_PATH', './../../phpBB3/');
$keyword = 'rosen';
include (PHPBB_ROOT_PATH . 'similar.inc.php');
?>
Zur Erklärung:
Die übergebe von Parametern ist mittels include nicht möglich und macht auch keinen Sinn weil das Script das includiert wird genau dort eingefügt wird wo es mittels include() aufgerufen wurde. Der komplette Inhalt von similar.inc.php steht also -bei der Ausführung- genau da wo der include() Befehl eigentlich ist.
Das Erklärt dann auch warum die similar.inc.php die anderen Dateien nicht findet. Denn

Code: Alles auswählen

$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
schaut ob ein Dateipfad in Form einer Konstante vorgegeben ist. Ist das nicht der Fall, wird der Dateipfad auf http://www.deine-domain.de/blumen/rosen/ gesetzt da das Skript offiziell genau in dem Ordner läuft. :)
Wir gehen also hin und belegen die Konstante PHPBB_ROOT_PATH mit dem tatsächlichem Dateipfad und weil wir gerade so schön dabei sind, definieren wir auch gleich die Variable $keyword damit die similar.inc.php weiss wonach sie in der Datenbank suchen soll. :D

Klingt jetzt vielleicht etwas Verwirrend, aber besser kann ich es nicht Erklären.