Autor Thema: Inhalt der Navigation dynamisch berechnen  (Gelesen 6240 mal)

Offline buzzy666

  • Aktives Mitglied
  • ***
  • Beiträge: 177
  • Ich liebe dieses Forum!
Inhalt der Navigation dynamisch berechnen
« am: 05.12.12 - 09:38:07 »
Moing zusammen,

ich habe den Auftrage einen Webshop mit XPages neu zu machen. Ich bräuchte hierfür eine (oder gerne auch mehrere) Ideen, wie ich die Navigation umsetzen könnte.
Und zwar gibt es in dem Shop Produktgruppen, darunter wiederum Herstellen und darunter wieder etliche Artikel. Der "Gag" an der Sache ist, dass je nach User, der sich anmeldet, nur bestimmte Produktgruppen/Hersteller und Artikel sichtbar sein dürfen.
Im alten Webshop werden die gültigen Einträge zur Laufzeit aus einer DB2-Tabelle ermittelt und via Agent zu einer Navigation verwurstet.
Mein Gedanke war nun, die verfügbaren Nav-Einträge pro User in einem Profil vorzuhalten und auszulesen, wenn der User sich anmeldet und daraus die Navi aufzubauen.

Ich habe schon in der OpenNTF geschaut, da aber leider nix gefunden, was mit weiterhelfen könnte.
Die Alternative wäre natürlich, die Navi schon gleich als fertiges HTML in den Profilen zu speichern...

Bin leider noch ein rechter XPage-Noob, von daher kann ich's schlecht einschätzen...

Was meint Ihr?

Danke & Gruß,
Buzzy

Offline Sven Hasselbach

  • Senior Mitglied
  • ****
  • Beiträge: 316
  • Geschlecht: Männlich
    • blog@hasselba.ch
Re: Inhalt der Navigation dynamisch berechnen
« Antwort #1 am: 05.12.12 - 09:47:05 »
Wie wäre es, bei Öffnen der XPage die erlaubten Produktgruppen / Hersteller in den sessionScope zu schreiben? Und daraus die Navigation aufzubauen?

Deine Alternative mit dem fertigen HTML ist in meinem Augen keine Alternative, sondern ein grausamer Gedanke.

Offline buzzy666

  • Aktives Mitglied
  • ***
  • Beiträge: 177
  • Ich liebe dieses Forum!
Re: Inhalt der Navigation dynamisch berechnen
« Antwort #2 am: 05.12.12 - 10:04:42 »
Deine Alternative mit dem fertigen HTML ist in meinem Augen keine Alternative, sondern ein grausamer Gedanke.

Da gebe ich Dir recht - würd ich mich auch nicht drum reißen!
Wie würdest Du dann dem Aufbau der Navi angehen? Mit dem Navigator aus der ExtLib? Und dann den Inhalt des Navigators aus dem sessionScope einlesen?
Wie würde ich denn sowas angehen? *hüstel* ;)

Danke & Gruß,
Buzzy

Offline Sven Hasselbach

  • Senior Mitglied
  • ****
  • Beiträge: 316
  • Geschlecht: Männlich
    • blog@hasselba.ch
Re: Inhalt der Navigation dynamisch berechnen
« Antwort #3 am: 05.12.12 - 10:27:59 »
Erstmal würde ich ein paar Grundlagen klären:
1. Wo bzw wie kommen die Daten aus der DB2 Tabelle? Wie werden die denn angezogen in dem Agenten? Was ist das für ein Agent? Und wie häufig ändern sich diese Daten (Stichwort "Caching")?
2. Dann die Frage, ob man es gleich "sauber" macht, also in einer Managed Bean, die im sessionScope vorgehalten wird, oder ist "nur" SSJS möglich?
3. Und zu guter Letzt: Passt der Navigator aus der ExtLb auch in das Konzept der Seite? Oder muss was grundlegend anderes umgesetzt werden?

Je nach dem würde ich in meinen Baukasten greifen und die entsprechenden Codeschnipsel für die Realisierung benutzen ;-)



Offline buzzy666

  • Aktives Mitglied
  • ***
  • Beiträge: 177
  • Ich liebe dieses Forum!
Re: Inhalt der Navigation dynamisch berechnen
« Antwort #4 am: 05.12.12 - 10:59:39 »
Also zu

1.) Momentan wird beim Aufruf des Shops ein LS-Agent gestartet, der dann via ODBC auf DB2 zugreift. Ich würde die jetzt halt nächtens aus DB2 auslesen und z.B. in einem Dokument vorhalten (so schnell werden sich die sichtbaren Artikel nicht ändern). Möglicherweise könnte mir da aber jmd. auch einen WebService zur Verfügung stellen, der mir einen JSON-String zurück gibt.
2.) Puh, das kann ich leider nicht beantworten - mit ManagedBeans hab ich noch nichts gemacht. Würde dann die MB die Ermittlung und Aufbereitung der Navi sorgen. oder wie?
3.) Wenn Du mit "Konzept" das Look-and-Feel bzw. Layout meinst: das haben wir AFAIK keine Vorgaben. Bisher ist's eine klassische Baum-Struktur...

Grüße,
Buzzy

Offline Sven Hasselbach

  • Senior Mitglied
  • ****
  • Beiträge: 316
  • Geschlecht: Männlich
    • blog@hasselba.ch
Re: Inhalt der Navigation dynamisch berechnen
« Antwort #5 am: 05.12.12 - 11:26:53 »
Zu 1.)
Wenn die Daten Cachbar sind, dann würde ich dir empfehlen, den bestehenden Agenten dazu zu bringen, Userdokumente anzulegen und dort die Kategorien abzulegen
Zu 2.)
Ja, würde sie. Bzw. die Daten vorhalten. Das geht aber auch per SSJS, hier ein Beispiel:

Code
/***
 * Global function to get a CurrentUser object from sessionScope. 
 * Creates a new CurrentUser object if there is none in the scope.
 *
 * @author Sven Hasselbach
 * @return a CurrentUser object
 */
function getCurrentUserObjFromScope() {
	var cUser;
	if (!sessionScope.containsKey("user")) {
		synchronized(sessionScope) {
			cUser = new CurrentUser();
			sessionScope.put("user", cUser);
		} 
	}
	cUser = sessionScope.get("user");
	return cUser;
}

/***
 * User Object
 *
 * @author Sven Hasselbach
 */
function CurrentUser(){
	var _navigatiorObj = null;
	
	/**
	 * @return Navigator object
	 */
	this.getNavigator = function(){
	
		if( typeof this._navigatorObj === 'undefined' )
			this.setNavigator( loadNavigator() );
			
		return this._navigatorObj;
	}
	/**
	 * @param Navigator object
	 */
	this.setNavigator = function( navObj){
		this._navigatorObj = navObj;
	}
	
	/**
	 * load Navigator
	 * @return navigation object
	 */
	 function loadNavigator(){
	 	
		// do lookup or whatever
		var v = new java.util.Vector();
		v.add("1");
		v.add("2");
		v.add("3");
		return v;
	 }
		
}

Als SSJS library kann der Code in der XPage dann mit

Code
getCurrentUserObjFromScope().getNavigator();

ausgelesen werden.

Zu 3.)
Dann solltest Du den ExtLib Navigator verwenden. Dort gibt es die repeatTreeNode, die kann dafür wunderbar verwendet werden. Dafür könntest Du dann noch ein SSJS Objekt im Userscope ablegen, das die nötigen Eigenschaften hat.

Offline buzzy666

  • Aktives Mitglied
  • ***
  • Beiträge: 177
  • Ich liebe dieses Forum!
Re: Inhalt der Navigation dynamisch berechnen
« Antwort #6 am: 05.12.12 - 13:33:07 »
Na dann werd ich mich da mal drüber machen, vielen Dank schon mal!!!

Greets,
Buzzy

Offline MLoy

  • Junior Mitglied
  • **
  • Beiträge: 57
Re: Inhalt der Navigation dynamisch berechnen
« Antwort #7 am: 21.06.13 - 16:15:10 »
Hallo Miteinander,

das mit dem Navigator hörte sich gut an.

Funktioniert auch soweit (Test!):


Code
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" xmlns:xe="http://www.ibm.com/xsp/coreex">
	<xe:navigator id="nav1" expandable="true">
		<xe:this.treeNodes>
			<xe:basicContainerNode label="ArtikelGruppe1">
				<xe:this.children>
					<xe:repeatTreeNode loaded="true" indexVar="index"
						var="tempData">
						<xe:this.children>
							<xe:basicLeafNode loaded="true"
								label="#{javascript:tempData;}">

							</xe:basicLeafNode>
						</xe:this.children>
						<xe:this.value><![CDATA[#{javascript:
return 	["TEST1","TEST2","TEST3"];}]]></xe:this.value>
					</xe:repeatTreeNode>
				</xe:this.children>
			</xe:basicContainerNode>
		</xe:this.treeNodes>
	</xe:navigator>
</xp:view>

Allerdings hab ich die Aufgabenstellung, dass auch die Tiefe der Navigation dynamisch ist.
Ich bekomm vom Backend (nicht Notes!) Daten im folgenden Aufbau:

Code
<Gruppe id="G1">
   <Artikel id="A1" />
   <Artikel id="A2" />
   <UnterGruppe id="U1">
      <Artikel id="A6" />
      <UnterGruppe id="UU1">
         <Artikel id="A4" />
         <Artikel id="A5" />
      </UnterGruppe>
   </UnterGruppe>
</Gruppe>

Also Müsste man hier wohl auch die repeatTreeNode schachteln.
Fest ist nur die oberste Ebene (in dem Beispiel id = "G1")
Hat das schon jemand gemacht? Ich würd mich über ein Beispiel freuen!

Schönes Wochenende!
Marcus

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz