Dynamische Navi in PHPBB? SO hab ich es gelöst>

Wie verwendet man Templates oder erstellt Navigationen und passt diese an.

Dynamische Navi in PHPBB? SO hab ich es gelöst>

Beitragvon chip » 27. Mär 2007, 01:03

Hallo!

Ich habe schon einige Beiträge gelesen, wo nach einer dynamischen (und von Redaxo) generierten Navigation gefragt wurde, die man in einem PHPBB Forum verwenden kann. Hier meine Lösung:

1. Neues Template in Redaxo anlegen, welches die gewünschte dynamische Redaxo-Navigation erstellen soll. Dabei am Ende des Templates die Variable per ECHO oder PRINT ausgeben.

2. In der Redaxo-Struktur einen Artikel anlegen, welcher das soeben erstellte Template zugewiesen bekommt. Die komplette URL dieses Artikels kopieren (Z.B. http://www.meinewebsite.de/index.php?ar ... 14&clang=0

3. In dem Installationsverzeichnis des PHPBB Forums die Datei includes/page_header.php öffnen und ganz nach unten scrollen wo die "common variables" definiert werden. Unter dem Kommentar, bevor die Variablenzuweisungen beginnen, habe ich folgenden Code hinzugefügt:

Code: Alles auswählen
ob_start();     // Wir starten den Buffer
include("http://www.meinewebsite.de/index.php?article_id=14&clang=0");    // Artikel mit dem Redaxo-Navitemplate ist jetzt im im Buffer
$redaxonavi=ob_get_contents();  //Buffer wird in die $redaxonavi geschrieben
ob_end_clean();  //Buffer wird gelöscht


Direkt darunter beginnen jetzt die Zuweisungen für die einzelnen Variablen. Hier fügen wir eine neue Zeile hinzu, direkt unter " $template->assign_vars(array( ":

Code: Alles auswählen
  'DYNAMIC_REDAXO_NAVIGATION' => $redaxonavi,


4. und letzter Schritt: Im PHPBB Installationsverzeichnis den Ordner Templates aufrufen, dort zum verwendeten Template navigieren und z.B. die Datei "overall_header.tpl" bearbeiten (kommt darauf an, wo man letztendlich die Navi hin haben möchte). In dieser Datei an der gewünschten Stelle, wo man die Redaxo-Navigation haben möchte nur noch

Code: Alles auswählen
{DYNAMIC_REDAXO_NAVIGATION}


hinschreiben, speichern und wieder hochladen - fertig!

So hat es bei mir funktioniert, und der Aufwand ist minimal, da man im Grunde keinen Code neu schreiben muss. Anregungen und wie man es besser/schneller/sicherer machen kann nehme ich gerne entgegen.

Da das Forum bei mir keine Kernfunktion darstellt und der Traffic sich in Grenzen hält, hoffe ich, dass die Performance gut bleiben wird.
Zuletzt geändert von chip am 17. Apr 2007, 20:10, insgesamt 1-mal geändert.
chip
 
Beiträge: 102
Registriert: 4. Mai 2006, 20:56

Beitragvon Dr KillerJoe » 27. Mär 2007, 09:25

Hi.

Super! Davon werden bestimmt viele Gebrauch machen^^ (ich evtl auch)

Wegen der Perfomance: Da der redaxo Artikel gecached wird wirds da denke ich wenig Probleme geben. Ne Abfrage, ob der Artikel existiert würde noch Sinn machen, aber die kann sich ja auch jeder selber stricken.

Wäre toll, wenn Du es in die Wiki eintragen könntest/würdest (PW steht auf der Startseite der Wiki).

mfg
Flo
Die Doku und Wiki sind Deine Freunde!!!
Dr KillerJoe
 
Beiträge: 1729
Registriert: 24. Nov 2005, 21:29

Beitragvon chip » 27. Mär 2007, 13:19

Hi Flo,

es freut mich, dass die Informationen von Wert sein kann. Das Forum hat mir schon viel gegeben, und es tut gut, auch mal eine kleines Tut zurückzugeben, welches vor allem einfach und schnell umzusetzen ist, ohne großartig experimentieren und ändern zu müssen.
chip
 
Beiträge: 102
Registriert: 4. Mai 2006, 20:56

Beitragvon alex2911 » 27. Mär 2007, 15:59

Es gäbe noch einen anderen Weg.
Man könnte in Redaxo eine Seite erstellen die offline geschaltet wird. Diese könnte man dann hernehmen. Aber mit include würde ich es weniger machen. Bin nicht so ein "Include-Fan". Besonders nicht bei externen Seiten.
Benutzeravatar
alex2911
 
Beiträge: 569
Registriert: 20. Jul 2005, 03:13
Wohnort: Österreich

Beitragvon chip » 27. Mär 2007, 20:28

alex2911 hat geschrieben:Es gäbe noch einen anderen Weg.
Man könnte in Redaxo eine Seite erstellen die offline geschaltet wird. Diese könnte man dann hernehmen. Aber mit include würde ich es weniger machen. Bin nicht so ein "Include-Fan". Besonders nicht bei externen Seiten.


Hast du es per include schon mal gelöst? Ich hatte da meine massiven Probleme, sodass ich lieber über eine *.tpl gehe, was von der herangehensweise dem PHPBB System eher entspricht.
chip
 
Beiträge: 102
Registriert: 4. Mai 2006, 20:56

Beitragvon alex2911 » 27. Mär 2007, 20:46

Ich include weder fremde Seiten noch arbeite ich mit phpbb.
Nutze eigentlich nur IPB und arbeite mit curl oder zur Not mit fopen.
Benutzeravatar
alex2911
 
Beiträge: 569
Registriert: 20. Jul 2005, 03:13
Wohnort: Österreich

Beitragvon --Alex-- » 9. Apr 2007, 10:46

Ich habs so gemacht wie beschrieben, aber ich bekomm ne fehlermeldung:
Code: Alles auswählen
Warning: include() [function.include]: URL file-access is disabled in the server configuration in C:\Programme\xampp\htdocs\phpBB2\includes\page_header.php on line 347

Warning: include(http://localhost/redaxo3_2_1/index.php?article_id=25&clang=0) [function.include]: failed to open stream: no suitable wrapper could be found in C:\Programme\xampp\htdocs\phpBB2\includes\page_header.php on line 347

Warning: include() [function.include]: Failed opening 'http://localhost/redaxo3_2_1/index.php?article_id=25&clang=0' for inclusion (include_path='.;C:\Programme\xampp\php\pear\') in C:\Programme\xampp\htdocs\phpBB2\includes\page_header.php on line 347


Edit: hat sich erledigt. hab jetzt mal richitg die php.ini die ich ändern musste neu geladen

Nächstest Problem: was meinst du mit
Dabei am Ende des Templates die Variable per ECHO oder PRINT ausgeben.
--Alex--
 
Beiträge: 9
Registriert: 8. Apr 2007, 08:32

Beitragvon chip » 9. Apr 2007, 12:36

--Alex-- hat geschrieben:Nächstest Problem: was meinst du mit
Dabei am Ende des Templates die Variable per ECHO oder PRINT ausgeben.


Der Lösungsweg den ich beschreibe erfordert, dass das Redaxo-Navigationstemplate bereits die gesamte Navigation ausgibt, also dort schon ein echo.

Normalerweise hast du den gesamten Navigationsoutput in einer oder mehreren Variablen, die du dann beliebig genau an der richtigen Stelle in einem anderen Template ausgeben kannst.

Das Redaxo-Template gibt die Navi also aus, diese Navi (je nach Installationsverzeichnis von deinem Forum auf auf absolute Pfade bei den Redaxo-Links achten!) wird dann von PHPBB gecached und über das eigene Templatesystem an der richtigen Stelle ausgegeben.

Da du in einem PHPBB-Template kein PHP verwendest, kannst du dort das include nicht direkt setzen und daher der kleine Workaround!
chip
 
Beiträge: 102
Registriert: 4. Mai 2006, 20:56

Beitragvon --Alex-- » 9. Apr 2007, 12:44

Sorry dass ich im moment nicht ganz verstehe was du meinst, vllt kannst du mir einfach sagne was ich am tempalte verändern muss. Ich benutze dieses Template von Alex Zach:
Code: Alles auswählen
<?php
#### HIER SUCHARTIKEL ID EINGEBEN !
$suchartikelid = "";
#### SUCHARTIKEL ENDE
error_reporting(E_ALL ^ E_NOTICE); // Notices ausschalten
ini_set('arg_separator.output',  '&amp;');
ini_set ( "arg_separator.output", ";");
ini_set ( "url_rewriter.tags", "a=href");
   $article = OOArticle::getArticleById($REX['START_ARTICLE_ID'], $REX['CUR_CLANG']);
   $articleK = $article->getValue("_keywords");
   $articleD = $article->getDescription();

   if($this->getValue("description") != "") {

      $meta_beschreibung = preg_replace('/<.*?>/', ' ', $this->getValue("description"));
      $meta_beschreibung = htmlspecialchars($meta_beschreibung);
   }
   else {
      $meta_beschreibung = preg_replace('/<.*?>/', ' ', $articleD);
      $meta_beschreibung = htmlspecialchars($meta_beschreibung);
   }

   $meta_beschreibung = preg_replace('/<.*?>/', ' ', $meta_beschreibung);
   
   if($this->getValue("keywords")!= "") {
      $meta_suchbegriffe = htmlspecialchars($this->getValue("keywords"));
   }
   else {
      $meta_suchbegriffe = htmlspecialchars($articleK);
   }
   $meta_beschreibung = preg_replace('/\s+/', ' ', $meta_beschreibung);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<title><?php print $this->getValue("name") . ' | ' . $REX['SERVERNAME']; ?></title>
<meta name="keywords" content="<?php print $meta_suchbegriffe; ?>, keywords" />
<meta name="description" content="<?php print $meta_beschreibung; ?> metas" />
<meta name="Content-Language" content="de-DE" />
<meta name="Author" content="<?php echo $REX['SERVERNAME']; ?>" />
<meta name="Publisher" content="<?php echo $REX['SERVERNAME']; ?>" />
<meta name="Copyright" content="<?php echo $REX['SERVERNAME']; ?>" />
<meta name="Revisit" content="After 5 days" />
<meta name="Robots" content="INDEX,FOLLOW" />
<link rel="stylesheet" type="text/css" href="files/css2.css" media="screen" title="css" />
</head>
<body>
<div id="upbg"></div>

<div id="outer">


   <div id="header">
      <div id="headercontent">
         <h1><?php echo $REX['SERVERNAME']; ?></h1>
         <h2>Ihr Motto kommt hier rein</h2>
      </div>
   </div>
<?php
if ((int)$suchartikelid > 0){
?>
   <form method="post" action="index.php" id="formular">
      <div id="search">
         <input type="hidden" name="article_id" value="<?php echo (int)$suchartikelid;?>" />
         <input type="hidden" name="FORM[send]" value="1" />
         <input type="text" class="text" maxlength="64" name="rexsearch" />
         <input type="submit" class="submit" value="Suchen" />
      </div>
   </form>
<?php
}
?>
   <div id="headerpic"></div>
   <div id="menu">
<?php
// EXPLODE PATH
$PATH = explode("|",$this->getValue("path").$this->getValue("article_id")."|");
// GET CURRENTS
$path1 = $PATH[1];
$path2 = $PATH[2];
$path3 = $PATH[3];

/* START 1st level categories */
$nav .= '<ul>';
$nav2 = '';
foreach (OOCategory::getRootCategories() as $lev1) {
   if ($lev1->isOnline(true)):
      if ($lev1->getId() == $path1) {
         $nav .= '<li><a class="active" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a></li>';
       $lev1Size = sizeof($lev1->getChildren());
         if ($lev1Size != "0") {
            $nav2 = '<ul>';

            // START 2nd level categories
            foreach ($lev1->getChildren() as $lev2):
               if ($lev2->isOnline(true)) {
                  // 2nd level - active link
                  if ($lev2->getId() == $path2) {
                     $nav2 .= '<li class="active1"><a class="current" href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  }
                  // 2nd level - no active link
                  else {
                     $nav2 .= '<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  }
                  $nav2 .= '</li>';
               }
            endforeach;
            // END 2nd level categories
            $nav2 .= '</ul>';
        }
   } else { // if ($lev1->getId() == $path1) {
         $nav .= '<li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a></li>';
   }
   endif; // END by if ($lev1->isOnline())
}
$nav .= '</ul>';
// END 1st level categories

print $nav;
?>
   </div>
   <div id="menubottom"></div>
   <div id="content">
   <?php
      if ($this->getArticle(1) != ''){
   ?>

      <!-- Normal content: Stuff that's not going to be put in the left or right column. -->
      <div id="normalcontent">
      <?php
         print $this->getArticle(1);
      ?>
      </div>
   <?php
      }
   ?>

      <div class="divider1"></div>
      <!-- Primary content: Stuff that goes in the primary content column (by default, the left column) -->
      <div id="primarycontainer">
         <div id="primarycontent">
            <!-- Primary content area start -->
         <?php
            print $this->getArticle(0);
         ?>
            <!-- Primary content area end -->
         </div>
      </div>
      <?php
         if ($nav2 != ''){
      ?>
      <div id="secondarycontent">
         <!-- Secondary content area start -->
         <div class="box">
                     <h4>Navigation</h4>
            <div class="contentarea">
            <img src="files/css2/pic2.jpg" class="left" alt="Random foliage" />
            <?php
               print $nav2;
            ?>
            </div>
         </div>
         <!-- Secondary content area end -->
      </div>
      <?php
         }
      ?>
   </div>

   <div id="footer">
   <div class="left">Copyright &copy; 2007 <?php echo $REX['SERVERNAME']; ?>.</div>
   <div class="right">Powered by <a href="http://www.redaxo.de">Redaxo - Opensource CMS</a>.</div>
   </div>   
</div>
</body>
</html>
[/code]
--Alex--
 
Beiträge: 9
Registriert: 8. Apr 2007, 08:32

Beitragvon chip » 9. Apr 2007, 12:55

Das Template, welches du verwendest, generiert die Navigation direkt, alles passiert in diesem einen Template (Navigation, Design, platzieren der ctypes etc), daher funktioniert mein Lösungsvorschlag so noch nicht. Die Navigation ist nicht ausgelagert in einem eigenen Template, das kannst du jetzt anpassen:

Erstelle ein neues Redaxo-Template und kopiere diesen Teil der Navigation heraus, welcher speziell von PHPBB genutzt werden soll:

Code: Alles auswählen
<?php
// EXPLODE PATH
$PATH = explode("|",$this->getValue("path").$this->getValue("article_id")."|");
// GET CURRENTS
$path1 = $PATH[1];
$path2 = $PATH[2];
$path3 = $PATH[3];

/* START 1st level categories */
$nav .= '<ul>';
$nav2 = '';
foreach (OOCategory::getRootCategories() as $lev1) {
   if ($lev1->isOnline(true)):
      if ($lev1->getId() == $path1) {
         $nav .= '<li><a class="active" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a></li>';
       $lev1Size = sizeof($lev1->getChildren());
         if ($lev1Size != "0") {
            $nav2 = '<ul>';

            // START 2nd level categories
            foreach ($lev1->getChildren() as $lev2):
               if ($lev2->isOnline(true)) {
                  // 2nd level - active link
                  if ($lev2->getId() == $path2) {
                     $nav2 .= '<li class="active1"><a class="current" href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  }
                  // 2nd level - no active link
                  else {
                     $nav2 .= '<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  }
                  $nav2 .= '</li>';
               }
            endforeach;
            // END 2nd level categories
            $nav2 .= '</ul>';
        }
   } else { // if ($lev1->getId() == $path1) {
         $nav .= '<li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a></li>';
   }
   endif; // END by if ($lev1->isOnline())
}
$nav .= '</ul>';
// END 1st level categories

print $nav;
?>


Wie du siehst wird der Inhalt der Variable $nav ganz am Ende dieses Codes über print $nav ausgegeben, im Grunde hast du es ja schon die ganze Zeit gehabt. Jetzt folgst du dem Rest der Anleitung, d.h. einen neuen Artikel anlegen, diesem Artikel das neue Template zuweisen usw.

Ich weiss zwar nicht, wohin du das Forum installiert hast (relativ gesehen zu deinem Redaxo), aber ich denke, dass du die Navigation leicht anpassen musst, damit die Links korrekt funktionieren, mit anderen Worten, du brauchst absolute Pfade!
chip
 
Beiträge: 102
Registriert: 4. Mai 2006, 20:56

Beitragvon mete » 25. Jun 2007, 18:54

Hallo,

Die Integration der Navi in das Forum hat gut funktioniert.
Leider habe ich jetzt das Problem (wie du in deinem letzten Post angesprochen), dass die Pfade der Navi nicht stimmen.
Es ist immer die Subdomain des Forums im Link und nicht die vom Redaxo.

Was müßte ich denn in dem navitemplate ändern?
(Ich benutze die navi wie im Post vorher)


Danke schon im Voraus
mete
 
Beiträge: 14
Registriert: 19. Jun 2007, 07:18

Beitragvon mete » 27. Jun 2007, 12:26

Kann mir wirklich niemand helfen?

Ich möchte das Template so verändern, dass in der Navigation des Forums
der korrekte Pfad zum Redaxo verlinkt ist.
Mir ist allerdings unklar, was ich da verändern müßte.
Ich bitte um einen Tip.

Danke
mete
 
Beiträge: 14
Registriert: 19. Jun 2007, 07:18

Beitragvon chip » 28. Jun 2007, 13:24

mete hat geschrieben:Kann mir wirklich niemand helfen?

Ich möchte das Template so verändern, dass in der Navigation des Forums
der korrekte Pfad zum Redaxo verlinkt ist.
Mir ist allerdings unklar, was ich da verändern müßte.
Ich bitte um einen Tip.

Danke


Dein Navigationstemplate generiert vermutlich relative Links. Du kannst daraus absolute Pfade machen.

Z.B:

VORHER: $nav .= '<li><a class="active" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a></li>';

NACHHER: $nav .= '<li><a class="active" href="http://www.meinehomepage.de/forum/'.$lev1->getUrl().'">'.$lev1->getName().'</a></li>';

Vielleicht hilft dir das so schon weiter!
chip
 
Beiträge: 102
Registriert: 4. Mai 2006, 20:56

Beitragvon mete » 29. Jun 2007, 12:55

Genau das habe ich gesucht! Danke

Funktioniert.

Gibt es auch eine Variable, die man anstelle http://.... einsetzen kann?
mete
 
Beiträge: 14
Registriert: 19. Jun 2007, 07:18

Beitragvon Dr KillerJoe » 29. Jun 2007, 18:40

Code: Alles auswählen
//VORHER: $nav .= '<li><a class="active" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a></li>';

NACHHER: $nav .= '<li><a class="active" href="'.$REX['SERVER'].'/'.$lev1->getUrl().'">'.$lev1->getName().'</a></li>';
Damit wird die unter Specials eingestellte Variable $REX['SERVER'] für die URL benutzt (ohne /), wenn Du den / mit unter Specials eingibst kannst Du das '/'. löschen ;)

mfg
Flo
Die Doku und Wiki sind Deine Freunde!!!
Dr KillerJoe
 
Beiträge: 1729
Registriert: 24. Nov 2005, 21:29

Nächste

Zurück zu Templates/Navigationen [R3]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron