Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#1 18. November 2020 00:27

mugenx5
probiert CMS/ms aus
Ort: Bern
Registriert: 11. Januar 2011
Beiträge: 26
Webseite

Javascript load Datei - Smarty Tag wird nicht erkannt

Hallo zusammen
Ich habe eine Seite mit 2 Spalten. In der linken Spalte habe ich eine Liste die aus einem xml erzeugt wird. Wenn ich auf ein Element aus der Liste klicke, dann sollen in der rechten Spalte die Details zu diesem Eintrag angezeigt werden.
Ich bekomme die Element Nummer und nun soll anhand dieser Nummer die rechte Spalte neu geladen werden.
Das funktioniert auch. Das Problem ist, dass ich in dieser Datei mit dem HTML Code für die Spalte auch SmartyVariablen habe, deren Werte angezeigt werden sollen. Das funktioniert leider nicht!

Mein Javascript sieht so aus:

document.getElementById('nav').onclick = function(e) {
			if (!e) e = window.event;
			var elem = e.target || e.srcElement;
			if(elem.tagName != 'A')
				return;
			$sel = (elem.id);
                        $('#details').load("uploads/test.txt #details");

In der Datei test.txt steht im Moment folgendes drin:

<div class="col-3 col-12-medium" id="details">
   <p>{$sel}</p>
</div>

Ausgegeben wird {$sel} anstatt der Wert der Variable. $sel enthält den korrekten Wert.
Wer weiss Rat? Was mache ich falsch?

Grüsse
Markus

Offline

#2 18. November 2020 06:53

nockenfell
Moderator
Ort: Lenzburg, Schweiz
Registriert: 09. November 2010
Beiträge: 2.927
Webseite

Re: Javascript load Datei - Smarty Tag wird nicht erkannt

Ich denke dein Ansatz funktioniert nicht. Du lädst die Datei per Javascript und willst dabei, dass Smarty-Variablen verarbeitet werden. Das geht nicht. Damit die Variablen verarbeitet werden, müsste die Datei beim laden der Seite mit Smarty gerendert werden.

Damit du die Werte ersetzen kannst, müsstest du diese auf der HTML Seite als Javascript-Variablen speichern und dann im Javascript die Ersetzungen vornehmen.


[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog  /   Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox

Offline

#3 18. November 2020 10:05

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: Javascript load Datei - Smarty Tag wird nicht erkannt

mugenx5 schrieb:

In der linken Spalte habe ich eine Liste die aus einem xml erzeugt wird.

Du kannst die xml ganz einfach in Smarty laden

[== Smarty ==]
{$xml = simplexml_load_file('https://www.thingiverse.com//rss/newest')}

Die Verarbeitung der "Smarty" xml Daten via Javascript ist deutlich einfacher, als die Daten von Javascript nach Smarty zu bekommen.

Beitrag geändert von Andynium (18. November 2020 10:06)

Offline

#4 18. November 2020 11:25

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: Javascript load Datei - Smarty Tag wird nicht erkannt

Mal ein paar Fragen zum besseren Verständis Deines Vorhabens.

Ist das wirklich alles, was Du da laden willst?
Und ist es immer so aufgebaut?
Wird die Antwort immer ein DIV mit der ID "details" sein?
Und willst Du immer nur den Inhalt dieses DIVs laden?
Also den Absatz mit der ID, die Du bereits via Javascript ermittelt hast.
Wozu um alles in der Welt?!? monkey

Du ermittelst eine ID via Javascript und lädst dann eine Datei, die exakt diese ID anzeigen soll. Sorry, das ergibt für mich keinen Sinn. Warum schreibst Du die ID nicht selber direkt via Javascript in die rechte Spalte, ohne irgendwas zu laden?

@Andy: Mir fällt gerade auf, dass wir ja bereits 10 Jahre DE-Forum feiern können  big_smile


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#5 18. November 2020 11:39

Andynium
Moderator
Ort: Dohna / SN / Deutschland
Registriert: 13. September 2010
Beiträge: 7.017
Webseite

Re: Javascript load Datei - Smarty Tag wird nicht erkannt

NaN schrieb:

@Andy: Mir fällt gerade auf, dass wir ja bereits 10 Jahre DE-Forum feiern können  big_smile

Feuerwerk zum 10jährigen

Hast recht - wäre mir glatt entfallen... den ersten Post hatten wir am 15.09.2010.

https://cms-1.org/forum/viewtopic.php?pid=2

An die Umstände, wie es dazu kam, mag ich lieber nicht mehr denken. Fast schon Gottes Fügung, dass ich zu dem Zeitpunkt eher zufällig ein FluxBB-Forum im Test hatte und relativ schnell live gehen konnte.

Dass es FluxBB geworden ist, lag daran, dass es mal im Forge ein Modul gab, was die User Ebene von CMS/ms und PunBB (der Vorgänger von FluxBB) verbunden hat. Um die Verbindung wieder funktional zu bekommen, hatte ich zu der Zeit die Übersetzung des Forums grundlegend überarbeitet/komplettiert.

Jetzt ist es, wie es ist. Und das ist gut so  cool .

Es erinnert mich auch daran, dass ich das Forum wieder mal aktualisieren sollte  tongue

Offline

#6 18. November 2020 19:14

mugenx5
probiert CMS/ms aus
Ort: Bern
Registriert: 11. Januar 2011
Beiträge: 26
Webseite

Re: Javascript load Datei - Smarty Tag wird nicht erkannt

Möglicherweise ist mein Ansatz total verkehrt. Ich versuche soetwas zum ersten mal.
Im Moment geht es mir nur darum den Weg resp. die Technik zu finden wie ich das Problem lösen soll. Schlussendlich ist da viel mehr Inhalt vorhanden.
Ich habe zwei Spalten. Insgesamt habe ich ein XML mit ca. 40 Einträgen mit jeweils ca. 25 Werten. Die Liste in der Linken Spalte umfasst nur wenige Werte wie z.B. Datum und Veranstaltungsname. In der rechten Spalte sollen noch viele mehr Parameter zum jeweils selektierten Element aus der Liste erscheinen. Die Idee war, herauszufinden welches Item angeklickt wurde und dann diesen Wert an die rechte Spalte zu übergeben um diese dann mit dem entsprechenden Parametern aus dem Smarty Array die anderen Werte anzuzeigen. In diesem Fall Details zu der ausgewählten Veranstaltung.
Ich dachte, durch den Refresh der rechten Spalte kann ich dann die Seite neu aufbauen und die jeweiligen Werte anzeigen.

Ich hoffe jetzt ist das Vorhaben etwas klarer. Wie gesagt, ich habe keine Ahnung ob ich auf dem Holzweg bin.

Gruss
Markus

Offline

#7 18. November 2020 19:24

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: Javascript load Datei - Smarty Tag wird nicht erkannt

Hm... also im Grunde ist mir schon klar, was Du bezweckst.
Was ich noch nicht ganz verstehe, was das mit Smarty zu tun hat.
Wo kommt denn das XML-Dingens her?
Und wo kommen die Daten her, die Du dazu auf der rechten Seite anzeigen willst?
Sind das zwei Datenquellen, oder steht das alles bereits in der XML-Datei drin?


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#8 18. November 2020 21:44

mugenx5
probiert CMS/ms aus
Ort: Bern
Registriert: 11. Januar 2011
Beiträge: 26
Webseite

Re: Javascript load Datei - Smarty Tag wird nicht erkannt

Die XML Datei lese ich ein, speichere die Werte in einem Smarty-Array. Wenn die Liste erstellt wird, bekommt jeder Eintrag eine ID die ich hochzähle. Wenn ich in der linken Spalte einen Eintrag aus der Liste anklicke, erhalte ich über mein Javascript den Index des Eintrages und weiss danach welches die zugehörenden restlichen Daten sind, die aus dem Array gelesen werden und in der rechten Spalte angezeigt werden.
Da ich die rechte Spalte über Javascript neu lade dachte ich ich kann den Wert des Indexes übernehmen und die entsprechenden Daten aus dem Array lesen und mit dem Rest anzeigen.

Beispiel: Links habe ich Daten und Veranstaltungsorte. Rechts sollten die dazugehörenden Daten wie z.B. Länge der Rennstrecke, Streckenbelag und ca. 20 weitere Parameter angezeigt werden.

Alle Daten sind im XML und werden beim Laden im Array gespeichert.

Offline

#9 19. November 2020 17:50

NaN
Moderator
Ort: Halle (Saale)
Registriert: 09. November 2010
Beiträge: 4.435

Re: Javascript load Datei - Smarty Tag wird nicht erkannt

Okay, also hast Du im Prinzip alle Daten im Template.
Wenn das viele Daten sind, kann ich verstehen, dass man die nicht alle auf einmal im Browser laden will.

Das Ding ist jetzt, wie @nockenfell schon sagt, dass Du dazu das CMS bzw. die Smarty-Engine erneut anfragen müsstest. Du kannst also nicht einfach im Javascript eine Variable definieren und dann glauben, dass der Server davon weiß. Die Javascript-Variable existiert nur beim Client im Browser.

Und Deine test.txt wird vom Server auch nur so ausgegeben wie sie da steht. Der weiß nicht, dass er diese TXT-Datei nochmal mit Smarty verarbeiten soll, bevor er sie ausliefert. Selbst wenn er es wüsste, weiß Smarty wiederum nicht, was diese Variable für einen Wert hat. Denn der Wert wird ja nur beim Client ausgelesen. Er muss aber beim Klick auch an den Server übergeben werden, damit Smarty dann die zugehörigen Daten aus dem XML Array ausgeben kann. Dazu muss die XML-Datei aber nochmal in ein Array geladen werden.

D.h. wenn Du ein und dieselbe Datenquelle in zwei Schritten ausgeben willst, wirst Du nicht drumherumkommen diese Datenquelle auch zweimal auf dem Server auszulesen. Dein Javascript müsste im Prinzip nicht einfach eine txt-Datei anfragen, sondern eine Seite Deines CMS. Bei diesem Aufruf hängst Du an den Link einfach die ID des ausgewählten Eintrags mit an die URL dran. Auf dem Server müsste dann die XML-Datei erneut verarbeitet aber nur die Daten zurückgegeben werden, die zur jeweiligen ID gehören. Bei der Ausgabe mus dann aber auch noch darauf geachtet werden, dass nicht die komplette Seite sondern nur das Resultat der zweiten Aktion ausgegeben wird.

Soviel zu Theorie.

In der Praxis bräuchtest Du auch zwei getrennte Algorithmen. Einer, der die XML-Datei in ein Array liest und die Liste generiert (das ginge problemlos via Template), und einer, der nach einer bestimmten Variable in der URL sucht um statt der Liste nur den zur Variable gehörigen Inhalt auszugeben (dazu wirst Du entweder eine zweite Seite mit extra reduziertem Template oder ein Plugin benötigen).

Ich bin mir fast sicher, dass es nicht wirklich sinnvoll ist, das ganze rein auf Template-Ebene zu realisieren, aber es sollte machbar sein.

Bevor wir weitermachen, Prinzip verstanden? (will nur sichergehen, dass ich hier für Dich kein Fachchinesisch verwende wink )

Eine andere Möglichkeit wäre, die Daten von Anfang an gleich vollständig ins Template in beide Spalten zu schreiben und dann via Javascript/CSS nur ein-/auszublenden.


Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)

Offline

#10 19. November 2020 22:06

mugenx5
probiert CMS/ms aus
Ort: Bern
Registriert: 11. Januar 2011
Beiträge: 26
Webseite

Re: Javascript load Datei - Smarty Tag wird nicht erkannt

Prinzip verstanden smile Es funktioniert!
Ich habe nun folgendes gemacht: Die Elemente in der linken Spalte sind alle als Links erstellt. Im href gebe ich zur URL noch die ID mit.
<a href="http://meineseite.ch/?id={$cnt}"> Jeder Eintrag in der Liste hat seine eigene ID die auch der Position im Array entspricht. Nach dem Aufruf habe ich in der Variable {$smarty.get.id}
den Wert des Elementes drin. Jetzt hole ich mir die Attribute die zur id passen und zeige diese in der rechten Spalte an.
Das heisst ich rufe immer die selbe Seite auf. Beim ersten Aufruf, zeige ich in der Spalte rechts immer die Attribute des 1ten Elementes an. Danach die des angeklickten.

Offline