Template extern verfügbar machen

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

Template extern verfügbar machen

Beitragvon Frezl » 5. Apr 2011, 13:28

Hey allerseits,

kennt jemand ne Möglichkeit, wie ich ein Redaxo-Template extern verfügbar machen kann? Wenn ich z. B. phpBB mit Redaxo verbinden möchte, baue ich üblicherweise das Seiten-Design nach und erstelle daraus ein Design für phpBB. Schön wäre es, wenn die dynamischen Inhalte aus Redaxo (z. B. Menü) automatisch mit ins das phpBB-Design eingebunden würden. Gibt's dafür vielleicht sogar ein AddOn? Habe leider bis jetzt nichts dergleichen gefunden.

Viele Grüße,
Frezl
Frezl
 
Beiträge: 153
Registriert: 13. Aug 2009, 13:31

Re: Template extern verfügbar machen

Beitragvon Frezl » 13. Apr 2011, 13:50

Andersrum gedacht: gibt es eine Möglichkeit, von außen her auf Redaxo zuzugreifen, um ein fertig gerendertes Template zurück zu bekommen?
Frezl
 
Beiträge: 153
Registriert: 13. Aug 2009, 13:31

Re: Template extern verfügbar machen

Beitragvon jeandeluxe » 13. Apr 2011, 14:37

Frezl hat geschrieben:Schön wäre es, wenn die dynamischen Inhalte aus Redaxo (z. B. Menü) automatisch mit ins das phpBB-Design eingebunden würden.


Kannst dir ja entspechende Templates @ rex basteln, die dir lediglich bestimmte Elemente auswerfen.. wie z.b. ne Navi.

lg,
Jan
RexSEO Support Checklist | Redaxo API Docu | rexdev.de | "You start with some money.."
mark your solved threads [SOLVED]™ promotion tour..
Benutzeravatar
jeandeluxe
 
Beiträge: 1941
Registriert: 29. Sep 2005, 09:50
Wohnort: Hamburg

Re: Template extern verfügbar machen

Beitragvon Frezl » 13. Apr 2011, 15:55

Ja, das hab ich ja, aber ich hab leine Ahnung, wie ich das Template gerendert in mein phpBB einbinden kann. Welche Datei muss ich dort einbinden?
Frezl
 
Beiträge: 153
Registriert: 13. Aug 2009, 13:31

Re: Template extern verfügbar machen

Beitragvon Xong » 13. Apr 2011, 16:28

Frezl hat geschrieben:Ja, das hab ich ja, aber ich hab leine Ahnung, wie ich das Template gerendert in mein phpBB einbinden kann. Welche Datei muss ich dort einbinden?

Du musst im Prinzip einen Hook/ein Plugin innerhalb von phpBB schreiben, der/das es dir ermöglicht einzelne Templates von Redaxo einzubinden.
LG,
Xong

Bild Määääääääääääääääääääääääh!
Benutzeravatar
Xong
 
Beiträge: 1560
Registriert: 5. Jun 2008, 07:30
Wohnort: Hohndorf in Sachsen

Re: Template extern verfügbar machen

Beitragvon Frezl » 14. Apr 2011, 00:37

Mmmkay, andersrum geht's nicht? Ich versuch grad ein AddOn für Redaxo zu basteln, das mir Templates rendert und in einen Ordner ablegt (ähnlich wie das Developer-Plugin). Die gerenderten Dateien will ich dann in das andere System (ist nicht das phpBB, war aber das bekannteste Beispiel, das mir eingefallen ist) includen.

Ist der Ansatz erfolgversprechend? Wäre auf jeden Fall universeller, als für jedes System ein eigenes Plugin zu schreiben.

Viele Grüße,
Frezl
Frezl
 
Beiträge: 153
Registriert: 13. Aug 2009, 13:31

Re: Template extern verfügbar machen

Beitragvon jeandeluxe » 14. Apr 2011, 00:56

Frezl hat geschrieben:Mmmkay, andersrum geht's nicht?


Evtl. beschreibst du nochmal etwas klarer was genau du eigentlich machen/erreichen willst.

lg,
Jan
RexSEO Support Checklist | Redaxo API Docu | rexdev.de | "You start with some money.."
mark your solved threads [SOLVED]™ promotion tour..
Benutzeravatar
jeandeluxe
 
Beiträge: 1941
Registriert: 29. Sep 2005, 09:50
Wohnort: Hamburg

Re: Template extern verfügbar machen

Beitragvon Frezl » 14. Apr 2011, 11:03

Im Prinzip will ich nur, dass ein CMS, das parallel zu Redaxo läuft (als Beispiel hab ich da mal phpBB genommen, weil das jeder kennt), gleich aussieht wie Redaxo, um dem User das Gefühl zu geben, dass es ein und das selbe System wäre.

Dazu nimmt man ja üblicherweise das Design von Redaxo und erstellt daraus ein Template für das andere System. Das sieht dann auch ganz gut aus, aber die dynamisch generierten Elemente bekommt man damit natürlich nicht. Damit meine ich v. a. die Navigation, aber auch andere Dinge wie Newsticker in der Sidebar und so. Die sollte ich ja auch in das Template von phpBB einbinden, damit das ganze echt aussieht.

Meine Frage ist also: Wie kann ich die betreffenden Redaxo-Template-Teile (hab für jedes dieser Elemente in Redaxo ein eigenes Template angelegt) mit dem generierten Content in das phpBB-Template einbinden?

Mein Ansatz war, dass ich mit dem phpBB auf ein Plugin in Redaxo zugreife, das mir die entsprechenden Teile gerendert zurückliefert, oder alternativ (wie in meinem letzten Post beschrieben) auf fertig gerenderte Template-Elemente, die das Plugin in einen Ordner abgelegt hat. Ist sowas möglich?

Grüße,
Frezl
Frezl
 
Beiträge: 153
Registriert: 13. Aug 2009, 13:31

Re: Template extern verfügbar machen

Beitragvon Xong » 14. Apr 2011, 11:44

Hi Frezl,

ich hab die Lösung, die ich damals gebastelt hatte, gefunden:
Code: Alles auswählen
function rex_get_template($_id)
{
  global $REX;
 
  // Redaxo (seelisch) vorbereiten =)
  $REX = array(
    'HTDOCS_PATH' => '../'
  );

  $cwd = getcwd();
 
  // Redaxo einbinden
  chdir('../redaxo');
  include './include/master.inc.php';
 
  // benötigte Addons einbinden
  require_once $REX['INCLUDE_PATH'].'/addons/community/config.inc.php';
  require_once $REX['INCLUDE_PATH'].'/addons/community/plugins/setup/config.inc.php';
  require_once $REX['INCLUDE_PATH'].'/addons/rexseo/config.inc.php';
  require_once $REX['INCLUDE_PATH'].'/addons/x_opf_lang/extensions/extension_opf_lang.inc.php';
 
  // benötigte Variablen und Konstanten setzen
  $REX['ARTICLE_ID'] = 1;
  define('TBL_B1_OPF_LANG', $REX['TABLE_PREFIX'].'b_1_opf_lang');
 
  // jegliche Ausgabe senden ...
  @ob_flush();
  // ... und Pufferung aktivieren
  ob_start();
 
  // Template in den Puffer schreiben
  $tpl = new rex_template($_id);
  include $tpl->getFile();
 
  chdir($cwd);
 
  // Puffer zurückgeben und löschen,
  // es erfolgt keine Ausgabe
  return rex_b1_opf_lang(array('subject' => ob_get_clean()));
}

Das ist das Prinzip wie man von außen Zugriff auf ein Redaxotemplate bekommt. Bei dir kann es natürlich vorkommen, dass du einige Addons nicht bzw. neue zusätzlich einbinden musst. Z. B. ist es für dich wahrscheinlich vollkommen unnötig das Community-Addon und das Outputfilter-Addon einzubinden.
LG,
Xong

Bild Määääääääääääääääääääääääh!
Benutzeravatar
Xong
 
Beiträge: 1560
Registriert: 5. Jun 2008, 07:30
Wohnort: Hohndorf in Sachsen

Re: Template extern verfügbar machen

Beitragvon Frezl » 18. Apr 2011, 13:24

Hey Xong,

vielen Dank für den Code! Hab ihn mal auf meine Bedürfnisse zusammengestutzt:

Code: Alles auswählen
<?php

   function get_rex_template ($id) {

      global $REX;

      // Redaxo (seelisch) vorbereiten =)
      $REX = array (
         'HTDOCS_PATH' => '../'
      );

      // Redaxo einbinden
      include ('./../redaxo/include/master.inc.php');

      // Template in den Puffer schreiben
      $template = new rex_template ($id);
      include ($template->getFile ());
      
   }

?>


Das funktioniert auch super, solange ich nur ein Template einbinde. Wenn ich die Funktion get_rex_template () aber an mehreren Stellen aufrufe, bekomme ich den Fehler
Warning: Invalid argument supplied for foreach() in C:\Programme\xampp\htdocs\projekte\GaBi\01_TESTGELAENDE\redaxo\include\classes\class.ooredaxo.inc.php on line 149


Habs mit unset ($template); und solchen Dingen versucht, hat aber leider alles nichts geholfen :-( Weißt du, was der Fehler ist?

Viele Grüße,
Frezl
Frezl
 
Beiträge: 153
Registriert: 13. Aug 2009, 13:31

Re: Template extern verfügbar machen

Beitragvon Frezl » 18. Apr 2011, 14:00

Nach längerer Rumspielerei hab ich die Lösung selbst entdeckt: Statt die ganze Variable $REX zu überschreiben, sollte nur der betreffende Eintrag des Arrays geändert werden:

Code: Alles auswählen
<?php

   function get_rex_template ($id) {

      global $REX;

      // Redaxo (seelisch) vorbereiten:
      $REX['HTDOCS_PATH'] = '../';

      // Redaxo einbinden:
      include ('./../redaxo/include/master.inc.php');

      // Template einbinden:
      $template = new rex_template ($id);
      include ($template->getFile ());
      
   }

?>


Viele Grüße,
Frezl
Frezl
 
Beiträge: 153
Registriert: 13. Aug 2009, 13:31

Re: Template extern verfügbar machen

Beitragvon Frezl » 18. Apr 2011, 14:53

Jetzt stellt sich noch die Frage: Wie bekomme ich meine Navigation dazu, die Links richtig auszugeben? Habe eine einfache Navigation mit der rex_navigation::factory () erstellt. Wenn ich dieses Template in mein phpBB einbinde, bekomme ich Links a la
www.domain.tld/phpbb/index.php?article_id=1&clang=0

Damit führen sie leider nicht zum Ziel, da sie eine Ebene zu tief gehen. Hab in der Variable $REX keinen Eintrag gefunden, mit dem sich der Pfad korrigieren ließe. Auch die factory scheint keinen passenden Parameter zu haben, den man ändern könnte. Wie kann ich das Problem läsen?

Grüße,
Frezl
Frezl
 
Beiträge: 153
Registriert: 13. Aug 2009, 13:31

Re: Template extern verfügbar machen

Beitragvon Xong » 18. Apr 2011, 16:30

Du musst die Links einfach ersetzen.
So ist das in der Redaxo-MyBB-Bridge gelöst:
Code: Alles auswählen
function rexrewritelinks($page)
{
    global $mybb;

    $searcharray = array(
        $mybb->settings['bburl']."/member.php?action=register",
        "member.php?action=register",
        $mybb->settings['bburl']."/member.php?action=login",
        $mybb->settings['bburl']."/member.php?action=logout&amp;logoutkey=".$mybb->user['logoutkey'],
        "member.php?action=lostpw",
        " onclick=\"MyBB.quickLogin(); return false;\"",
        'usercp.php?action=profile'
    );

    $replacearray = array(
        $mybb->settings['rexreglink'],
        $mybb->settings['rexreglink'],
        $mybb->settings['rexloginlink'],
        $mybb->settings['rexlogoutlink'],
        $mybb->settings['rexpwlink'],
        "",
        $mybb->settings['rexprofilelink']
    );

    $page = str_replace($searcharray, $replacearray, $page);
   return $page;
}
LG,
Xong

Bild Määääääääääääääääääääääääh!
Benutzeravatar
Xong
 
Beiträge: 1560
Registriert: 5. Jun 2008, 07:30
Wohnort: Hohndorf in Sachsen

Re: Template extern verfügbar machen

Beitragvon Frezl » 19. Apr 2011, 12:34

HEUREKA!

Dass ich die Links irgendwie bearbeiten muss, war mir klar. Aber ich hatte keinen Ansatz, wie ich das machen kann, da ich ja nicht den Inhalt des Templates, sondern die Ausgabe des Templates bearbeiten muss. Jetzt hab ich aber endlich verstanden, wie die Ausgabe-Pufferung funktioniert und siehe da, es läuft :-)

Hier mein Code:
Code: Alles auswählen
<?php

   function get_rex_template ($id) {

      global $REX;

      // Redaxo (seelisch) vorbereiten:
      $REX['HTDOCS_PATH'] = '../';

      // Redaxo einbinden:
      include ('./../redaxo/include/master.inc.php');

      // Template einbinden:
      $template = new rex_template ($id);
      
      // Ausgabe des Templates abfangen:
      ob_start ();
      include ($template->getFile ());
      $output = ob_get_contents ();
      ob_end_clean ();
      
      // Inhalt des Templates bearbeitet ausgeben:
      echo rewrite_rex_links ($output);
      
   }
   
   /**
    * Schreibt alle Links so um, dass sie auf die richtige Redaxo-Datei
    * im übergeordneten Verzeichnis zeigen.
    */
   function rewrite_rex_links ($string) {
   
      return preg_replace ('/href="index.php/', 'href="../index.php', $string);      
   
   }

?>


Vielen dank für deine Hilfe und Denkanstöße!

Grüße,
Frezl
Frezl
 
Beiträge: 153
Registriert: 13. Aug 2009, 13:31


Zurück zu Templates/Navigationen [R4]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast