Yii Framework Forum: Dynamischer Aufbau einer Navigation - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Dynamischer Aufbau einer Navigation Rate Topic: -----

#1 User is offline   g3ck0 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 03-June 09

Posted 03 June 2009 - 05:24 PM

Hallo,

ich habe gleich noch eine Frage. Und zwar will ich ein CMS erzeugen, welches eine dynamische Navigation erhält, eben die Seiten aufruft, die der Nutzer angelegt. In der Datenbank gibt es dafür eine Tabelle, mit einer ID und einer REF_ID. Die REF_ID referenziert eine ID der gleichen Tabelle. Somit baue ich einen Baum auf.

Löst man sowasüber Widgets? Oder wie implementiere ich sowas am besten? Mir gehts dabei vorrangig um die Ideen, da ich Yii erst seit ein paar Tagen kenne.

Ebenso stellt sich mir die Frage, wie ich die URLs entsprechend abfange? Da ich ja für die unterschiedlichen URLs je eine andere Seite anzeigen muss. Gedacht habe ich mir, dass ich immer auf die selbe PHP-Datei umleite und dann eben den Inhalt entsprechend abändere. Wie erreiche ich sowas? oO

Danke für jede Idee!

mfg
armin
0

#2 User is offline   Mike 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 3,016
  • Joined: 06-October 08
  • Location:Upper Palatinate

Posted 04 June 2009 - 06:03 AM

Für das Menü bietet sich ein Widget an - wie prinzipiell für alle Ausgabeelemente, die auf mehreren Seiten (oder auf der selben Seite) wiederholt werden sollen.

Ein Widget ist schnell gebastelt:

[code=components/MeinMenue.php]<?php
class MeinMenue extends CWidget {
    public $aktuelleSeite;
    public function run() {
        // Hole hier den navigationsbaum aus der DB
        // und bereite ihn für vernünftige Ausgabe auf.
        // Daten liegen dann z.B. in $menue

      $this->render('meinmenue',array('menue'=>$menue));
    }
}[/code]

[code=components/views/meinmenue.php]<h1>Hauptmenue</h1>
<?php foreach($menue as $option): ?>
    <?php /* Hier muss das HTML hin, das eine Menüoption zur Anzeige bringt */ ?>
<?php endforeach; ?>[/code]

Wenn du die fehlenden Teile ergänzt hast, ist das Widget einsatzbereit. In einem View kannst du es dann so einbauen:

<?php $this->widget('application.components.MeinMenue',array(
    'aktuelleSeite' => 'namedieserseite'
)); ?>



Zu deinem Problem mit den URLs: Du wirst die jeweiligen Seiteninhalte ja irgendwo in einer Datenbank haben. D.h. du brauchst eine einzige Controlleraction, der du als Parameter übergibst, welche Seite angezeigt werden soll. In dieser Action holst du dann den Content, übergibst ihn an eine Viewdatei und bringst ihn dort zur Anzeige.

1

#3 User is offline   g3ck0 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 03-June 09

Posted 04 June 2009 - 07:36 AM

Quote

Zu deinem Problem mit den URLs: Du wirst die jeweiligen Seiteninhalte ja irgendwo in einer Datenbank haben. D.h. du brauchst eine einzige Controlleraction, der du als Parameter übergibst, welche Seite angezeigt werden soll. In dieser Action holst du dann den Content, übergibst ihn an eine Viewdatei und bringst ihn dort zur Anzeige.


Oh je... davon verstehe ich nur Bahnhof =(

Zur Datenbank: die primäre Tabelle ist ja weiter oben beschrieben. daneben gibt es eine zweite. Diese besteht mindestens aus einer REF_ID und einer TEXT-Spalte. Die REF_ID referenziert die ID der ersten Tabelle. Somit habe ich eine Zuordnung von Beiträgen zu einem Gliederungspunkt. Ich hoffe das ist verständlich erklärt.

Nun weiß ich nicht genau, wie du das mit der URL gebacken bekommen soll. Ich verstehe das bisher wie folgt:
Ich erzeuge einen Controller (z.B.: /controllers/TestController.php), der aufgerufen wird, wenn ich die folgende URL aufrufe: index.php?r=test/xxx.
Das xxx steht für eine Unterseite, die ich dann im controller abfragen kann, oder? Im SiteController ist dies ja durch die actionXXX-Methoden implementiert. Wie schaffe ich es aber, diese Unterseiten immer auf eine Methode zeigt?

Du hast an dieser Stelle, aber irgendwie einen anderen Ansatz genannt: wie übergebe ich einen Parameter? per URL? oO bin gerade echt überfragt... :(
0

#4 User is offline   Mike 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 3,016
  • Joined: 06-October 08
  • Location:Upper Palatinate

Posted 04 June 2009 - 07:58 AM

Du brauchst nur eine einzige Action für alle deine Seiten. Dieser Action übergibst du als Parameter, welche CMS-Seite angezeigt werden soll. Wenn du z.B. einen Controller namens CmsController und darin actionPage definierst, sähe deine URL erst mal so aus:

index.php?r=cms/page&content=irgendwas


In der Funktion actionPage machst du dann in etwa folgendes:

<?php
if (isset($_GET['content']))
    $refId=$_GET['content'];
else
    $refId='startseite';

$content=Content::model()->findByPk($refId);
if ($content===null)
  throw new CHttpException(404, 'Die gewünschte Seite existiert nicht!');

$this->render('page', array('content'=>$content'));


Content must du als ActiveRecord-Klasse definieren. Sie liefert dir den zugehörigen Textinhalt zurückliefert. Als Primärschlüssel sollte dort 'refId' definiert sein.
0

#5 User is offline   g3ck0 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 96
  • Joined: 03-June 09

Posted 04 June 2009 - 08:20 AM

ui, ui, ui... das hört sich klasse an =) danke dir vielmals! das hilft verdammt viel weiter!!!
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users