Zum Inhalt springen
ThreadAJAX & JavaScript (JS)

Wert aus einer json-Datei in PHP ausgeben

Kategorie
AJAX & JavaScript (JS)
Gelesen
5064
Antworten
10
Erstellt von: gelöschter Benutzer Datum: 08.02.2017, 21:05 Uhr
Archiv-KommentarArchiviert, nicht priorisiertPerformance & Technik

Redaktionelle Einordnung

Diese archivierte Diskussion behandelt Wert aus einer json-Datei in PHP ausgeben aus Sicht der Rubrik AJAX & JavaScript.

Technische Performance sollte heute mit Core Web Vitals, Renderbarkeit und realer Nutzererfahrung bewertet werden, nicht nur mit historischen Einzelmetriken.

Sinnvoll nutzbar bleibt der Thread vor allem als historischer Kontext, für typische Fragestellungen und zur Einordnung älterer Empfehlungen.

Einige im historischen Thread genannte Tools, Dienste oder externe Links könnten heute nicht mehr verfügbar oder inhaltlich überholt sein. Nutzen Sie sie bitte nur mit zusätzlicher Prüfung.

Startbeitrag

Originaler Foreninhalt in modernisierter Darstellung.

Zur Kategorie
gelöschter Benutzer
Threadstart · AJAX & JavaScript (JS) 5064 mal gelesen · 08.02.2017, 21:05 Uhr

Hallo zusammen!

Folgender Dateiinhalt liegt in einer json-Datei vor:

{
"url": "http://domain",
"propertiesXmlPaths": {
"period": ["/notdienste/zeitraum","/
notdienstplan/zeitraum"],
"entry": ["/container/entries/entry","/notdienste/
notdienst","/notdienstplan/notdienste/notdienst"],
"name": ["/container/entries/entry/name","/notdienste/
notdienst/apotheke","/notdienstplan/notdienste/notdienst/apotheke"],
"street": ["/container/entries/entry/street","/notdienste/
notdienst/strasse","/notdienstplan/notdienste/notdienst/strasse"],
"zipCode": ["/container/entries/entry/zipCode","/notdienste/
notdienst/plz","/notdienstplan/notdienste/notdienst/plz"],
"location": ["/container/entries/entry/location","/notdienste/
notdienst/ort","/notdienstplan/notdienste/notdienst/ort"],
"subLocation": ["/container/entries/entry/subLocation","/notdienste/
notdienst/ortsteil","/notdienstplan/notdienste/notdienst/ortsteil"],
"phone": ["/container/entries/entry/phone","/notdienste/notdienst/
telefon","/notdienstplan/notdienste/notdienst/telefon"],
"to": ["/container/entries/entry/to"],
"from": ["/container/entries/entry/from"],
"lat": ["/container/entries/entry/lat","/notdienste/
notdienst/latitude",
"/notdienstplan/notdienste/notdienst/latitude"],
"lon": ["/container/entries/entry/lon","/notdienste/
notdienst/longitude","/notdienstplan/notdienste/notdienst/longitude"],
"date": ["/notdienste/notdienst/datum","/notdienstplan/
notdienste/notdienst/datum"]
},
"useCurrentTime": true,
"toDay": 14,
"phoneRegionPrefix": "+49",
"propertiesDisplay": {
"from": ["

","b","u"," – "],
"to": ["b","u","

"],
"name": ["div"],
"street": ["p"],
"zipCode": ["

", "span"," "],
"location": ["span","

"],
"phone": ["p","a"]
}
}

Nun möchte ich, da die Variale toDay unterschiedlich ist, diese in der entsprechenden Ausgabe-Datei (php) angeben.

Der Code dazu sieht folgendermaßen aus:

else {
$content .= "


In den nächsten Tagen bieten keine
Apotheken einen Notdienst an.

";
}
$content .= "";



Wie man eine Variable in php ausgibt weiß ich. Aber wie ich sie aus der json-Datei ins PHP-File bekomme, das schnall ich (noch) nicht.

Mag mir da einer weiterhelfen?

Danke!

Marcus

Antworten

10 Beiträge
Foren Moderator Evil Genius Content Halbgott (973 Beiträge)
am 08.02.2017, 21:14 Uhr schrieb matthes
Antwort

Der von Dir gezeigte PHP-Code ist völlig ohne Aussage.

Den Inhalt der Datei in eine Variable lesen, per json_decode in ein Array umwandeln, mit print_r, var_export, o.ä. das Array anzeigen lassen und entsprechend einbauen.


Make Seitenreport great again!
gelöschter Benutzer
am 08.02.2017, 22:01 Uhr schrieb
Antwort

Wenn ich das json richtig lese sollte von dem objekt ausgehend

$json_object -> toDay dir den Wert liefern.

oder fehlt dir da was wie file_get_contents? php.net/manual/en/function.file-get-contents.php



@Matthes warum ein array?
gelöschter Benutzer
am 08.02.2017, 22:43 Uhr schrieb
Antwort

Ich habe jetzt versucht, mich da rein zu arbeiten.

Aber ich fürchte, das das von vornherein eigentlich unmöglich ist / war, da es mehrere Konfigurationsdateien gibt, die alle in einem Verzeichnis liegen.

Die Renderer-Datei aber, die wiederum in einem anderen Verzeichnis liegt, greift ja global.

Sollte es da doch eine Lösung geben, geht das über meine Kenntnisse weit hinaus.

Die Renderer-Datei schaut so aus

Das System verschluckt die : hinter https

Hier nochmal zum kopieren: www.dropbox.com/home

gelöschter Benutzer
am 08.02.2017, 23:32 Uhr schrieb
Antwort

Ja Joerg, das siehst Du richtig!

Und es funktioniert bei mir auch in sofern, das die Anzeige funktioniert:

salzsau-panorama.de/stadt-lueneburg/



Wenn keine Notdienst-Apotheke vorliegt, wie in diesem Falle (https://salzsau-panorama.de/aus-der-region/samtgemeinde-gellersen/)

zeigt er nur den (angepassten) Text an, das in den nächsten Tagen kein Notdienst angeboten wird. Und das wollte ich ein bisschen präzisieren.

Dafür habe ich im Verzeichnis Config 10 verschiedene Dateien angelegt. Für jede Samtgemeinde der Region eine.

Aber wie gesagt, wie (und ob) man das hin bekommt, das auf jede einzelne Config separat zugegriffen und der Wert ausgelesen werden kann, das übersteigt meine Fähigkeiten.

Ich belasse es also am besten erst einmal bei der allgemeinen Floskel
Foren Moderator Evil Genius Content Halbgott (973 Beiträge)
am 09.02.2017, 11:56 Uhr schrieb matthes
Antwort

joerg schrieb:
@Matthes warum ein array?


Weils ein langer Tag war und ich unkonzentriert...

@Marcus:
Wenn es den Text anzeigt, ist es auch möglich, das zu präzisieren. Zeig einfach mal den ganzen if-Block, bitte, nicht nur den else-Teil.


Make Seitenreport great again!
gelöschter Benutzer
am 09.02.2017, 19:41 Uhr schrieb
Antwort

Hallo Matthes!

Der komplette Block sieht so aus:

/**
* Render HTML View
*/
public function renderEntries(array $entries, $errors) {

$content = "

\\n";

if(count($errors)) {
$content .="

";
foreach($errors as $error){
$content .="

".$error."

";
}
$content .="

";
} else {
$content .= "

\\n";
if(!empty($entries)) {
foreach($entries as $entry) {
$content .= "

";
foreach($this->config->propertiesDisplay
as $prop => $tags) {
$content .= $this->wrapByTags($tags,
$entry[$prop], $prop);
}
$content .= "

";
}
} else {
$content .= "


In den nächsten Tagen bietet keine
Apotheke in der Samtgemeinde einen Notdienst an.

";
}
$content .= "

";
}
$content .= "

";
$content .= "

";

return $content;
}

Foren Moderator Evil Genius Content Halbgott (973 Beiträge)
am 09.02.2017, 21:31 Uhr schrieb matthes
Antwort

Ja, damit kann man arbeiten.
Lass Dir mal den Inhalt von $entries anzeigen und poste ihn hier.
Am besten von einer Apotheke ohne Notdienst.

Gleich nach
$content = "

\\n";


Make Seitenreport great again!
gelöschter Benutzer
am 09.02.2017, 21:55 Uhr schrieb
Antwort

Hallo Matthes!

Mit var_dump($entries) ergibt es array(0) { }


print_r und var_export ergeben array ( ).

Foren Moderator Evil Genius Content Halbgott (973 Beiträge)
am 09.02.2017, 22:35 Uhr schrieb matthes
Antwort

Ha, entschuldige bitte, das war unaufmerksam von mir... $entries muss ja leer sein.
Dann hast Du an der Stelle keinerlei Daten und kannst es ohne größere Anpassung an anderer Stelle wahrscheinlich nicht umsetzen. Die Funktion bekommt nur $entries übergeben - und $entries kann anscheinend bei der Übergabe bereits leer sein.

Wenn Du das lösen willst, müsstest Du die Stelle suchen, an der Du renderEntries aufrufst und die Daten übergibst.


Make Seitenreport great again!