Attribute zwischen Views übergeben

Hier finden sich Fragen und Ergänzung zur Dokumentation. // All questions and discussions about the documentation.
Antworten
Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Attribute zwischen Views übergeben

Beitrag von Well » 04.11.2011, 00:19:23

Hallo,

zwei Views:
main.html bindet static.html mittels core:importdesign ein. Ich möchte in static.html ein Attribut setzen und in main.html darauf zugreifen.

(a) über core:setattribute: Wie komme ich an das Attribut im Controller von main.html ran? Ich habe mir nun - nach langem rumprobieren - folgendes geschrieben:

Code: Alles auswählen

		public function getChildAttribute($name) {
			$children = $this->getDocument()->getChildren();

			foreach ($children as $child) {
				if ($child->getAttribute($name)) {
					return $child->getAttribute($name);
				}
			}

			return null;
		}
Geht das noch besser?

(b) Ich möchte nun noch im Controller von static.html ein Attribut setzen (und wieder im Controller von main.html darauf zugreifen, mit der obigen Methode). Wie mache ich das? Ich probiere schon ewig rum, schaffe es aber nicht ... Angenommen hätte ich irgendwas in der Richtung:

Code: Alles auswählen

$this->setAttribute('path', $title);

Code: Alles auswählen

$this->getDocument()->setAttribute('path', $title);

Code: Alles auswählen

$this->getDocument()->getParentObject()->setAttribute('path', $title);
- Wie mache ich das?

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Attribute zwischen Views übergeben

Beitrag von Megger » 04.11.2011, 00:32:06

Hast du dir mal den Benchmarktimer angeschaut? Da dürftest du genau sehen, was wann transformiert wird, also welcher Documentcontroller zuerst ausgeführt wird. Und nach meinem Verständnis dürfte zuerst dein MainController ausgeführt werden und danach dann der StaticController, dadurch ist es dann nicht möglich innerhalb des MainControllers auf Attribute des StaticControllers zuzugreifen. (Du könntest zwar das Attribute setzen, aber nicht mehr damit arbeiten)

Aber die Frage ist eher, was machst du innerhalb des StaticControllers worauf du wieder zugreifen musst? Bist du dir sicher, dass es dort richtig positioniert ist?
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: Attribute zwischen Views übergeben

Beitrag von Well » 04.11.2011, 00:44:09

Stimmt ... Dass das über core:setattribute dann überhaupt ging liegt ja daran, dass Taglibs vor Controller ausgeführt werden ...
Aber die Frage ist eher, was machst du innerhalb des StaticControllers worauf du wieder zugreifen musst? Bist du dir sicher, dass es dort richtig positioniert ist?
Geht darum, dass ich im View vom MainController so ein Sie sind hier: ... haben möchte, wobei das ... eben erst im StaticController ermittelt wird.
Du hast nicht zufällig eine andere Lösungsmöglichkeit parat?

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Attribute zwischen Views übergeben

Beitrag von ma2604121 » 04.11.2011, 00:56:55

Ich meine irgendwo schon einmal über eine APF-Komponente gestoßen zu sein, die so etwas ermöglicht hat. Leider finde ich den entsprechenden Artikel gerade nicht.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4538
Registriert: 04.11.2007, 16:13:53

Re: Attribute zwischen Views übergeben

Beitrag von dr.e. » 04.11.2011, 00:57:50

Dieser Fall ist ein Klassiker für das Front-Controller-Pattern. Sofern du Dinge vor dem View-Aufbau wissen oder in mehreren Views verwenden musst, sollte die Information bereits in einer Front-Controller-Action aufgebaut werden. Gerade das Thema Navigation bietet sich hier sehr gut an, denn du kannst dies zentral abhandeln und dann für mehrere Komponenten zur Verfügung stellen. So hast du immer das Problem, dass du vom Timing abhängig bist und eine Umstrukturierung deiner Views die Funktionalität bricht.

Solltest du ein Beispiel benötigen, sag Bescheid.
Viele Grüße,
Christian

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: Attribute zwischen Views übergeben

Beitrag von Well » 04.11.2011, 01:42:47

Solltest du ein Beispiel benötigen, sag Bescheid.
Jein. :)

Ich habe mir nun folgende Action geschrieben:

Code: Alles auswählen

<?php
	import('tools::request', 'RequestHandler');

	class LoadStaticContentAction extends AbstractFrontcontrollerAction {
		public function run() {
			$page = RequestHandler::getValue('page', 'static');
			if ($page != 'static') return;

			$contentMgr = $this->getServiceObject('site::biz', 'ContentManager');
			$file = RequestHandler::getValue('file', 'index');

			try {
				$content = $contentMgr->getContent($file);
			} catch (Exception $e) {
				$content = $contentMgr->getContent('_404');
			}
			
			$staticContent = $this->getServiceObject('site::biz', 'StaticContent');
			$staticContent->setContent($content);
			$staticContent->setTitle($contentMgr->getContentTitle($content));
		}
	}
?>
Und greife in den zwei Controllern dann nur noch auf das Model zu:

Code: Alles auswählen

	class static_controller extends base_controller {
		public function transformContent() {
			$staticContent = $this->getServiceObject('site::biz', 'StaticContent');
			$this->setPlaceHolder('content', $staticContent->getContent());
		}
	}

	class main_controller extends base_controller {
		public function transformContent() {
			$staticContent = $this->getServiceObject('site::biz', 'StaticContent');
			if ($staticContent->isAvailable()) {
				$title = $staticContent->getTitle();
				$this->setPlaceHolder('path', ' &bull; ' . $title);
				$this->setPlaceHolder('title', $title);
			} else {			
				$path = $this->getChildAttribute('path');

				if ($path) {
					$this->setPlaceHolder('path', ' &rsaquo; ' . $path);
				}

				$this->setPlaceHolder('title', $this->getChildAttribute('title'));
			}
		}
	}
Ist das i.O. oder gibt es noch bessere Lösungen?

Danke euch, nun funktioniert es immerhin. :)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4538
Registriert: 04.11.2007, 16:13:53

Re: Attribute zwischen Views übergeben

Beitrag von dr.e. » 05.11.2011, 10:21:57

Das ist genau richtig so. :)
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast