Actions
Feature #14090
openNützliche _script funktionen
Start date:
19.04.2022
Due date:
% Done:
0%
Estimated time:
Discuss:
Prio Planung:
Description
Ich habe eben wieder mit _script gespielt.
Funktionen die ich nützlich fände und die ich nicht gefunden habe:
- Ich möchte in meiner php-Funktion nicht nur auf einen Record sonder auf das ganze Resultat eines Queries zugreifen.
(Lässt sich erreichen, indem ich meine Funktion in einem Subquery aufrufe. Dann muss ich aber mein Zwischenergebnis jeweils über den Var-Store weiterreichen.)
- Ich möchte gerne dem Var-Store nicht bloss einen einzelnen Wert sondern ganze Arrays hinzufügen und diese dann in einem späteren _script Aufruf oder in twig nutzen.
(für den _script-Aufruf funktioniert das mit (de)serialize, aber für Twig habe ich keine Lösung gefunden)
Gibt es andere Workarounds für meine Wünsche bzw. habt ihr entsprechende erweiterungen geplant?
Updated by Nicola Chiapolini about 1 year ago
Ich habe noch etwas weiter gespielt und Twig lässt sich direkt aus den Funktionen aufrufen.
Mein aktuelles Test-Script filtert alle Oranisationen in deren Name "Institut" vorkommt und formattiert diese anschliessend in einer Aufzählung grün.
Aktuell sieht das Setup wie folgt aus:
- Report
10.sql = SELECT name_de FROM org_units LIMIT 50 10.content = hideLevel 10.1.sql = SELECT "F:../qfqtest_project/scripts/filtered_list.php|call:filter_array|arg:data=result&token=Institut" AS _script 20.sql = SELECT "F:../qfqtest_project/scripts/filtered_list.php|call:render_twig|arg:data=result&template=test.html" AS _script
- php-file (
filtered_list.php
)<?php function filter_array($param, $qfq) { $data = unserialize($qfq::getVar($param['data'], "VE")); if ($data == ""){ $data = array(); } $name = $qfq::getVar("name_de", "R"); if ( strpos( $name, $param['token'] ) !== false ) { $data[$name] = "green"; } else { $data[$name] = "red"; } return [$param['data'] => serialize($data)]; } function render_twig($param, $qfq) { $loader = new \Twig\Loader\FilesystemLoader('../qfqtest_project/scripts/templates/'); $twig = new \Twig\Environment($loader); $data = unserialize($qfq::getVar($param["data"], "V")); echo $twig->render($param["template"], ['result' => $data]); } ?>
- Template
<h3>Twig from Function</h3> <ul> {% for name, color in result %} <li style="color: {{color}}">{{name}}</li> {% endfor %} </ul>
Updated by Nicola Chiapolini about 1 year ago
Und noch ein Update: In meinem Setup oben funktionieren qfqlinks natürlich nicht...
mit json_encode/json_decode statt (de)serialize und dem |json_decode Filter von QFQ für Twig lässt sich das aber lösen:
- Report
10.sql = SELECT name_de FROM org_units LIMIT 50 10.content = hideLevel 10.1.sql = SELECT "F:../qfqtest_project/scripts/filtered_list.php|call:filter_json|arg:data=result&token=Institut" AS _script 20.sql = SELECT 1 20.twig = file:test_json.html
- php-file
function filter_json($param, $qfq) { $data = json_decode($qfq::getVar($param['data'], "VE"), true); if ($data == ""){ $data = array(); } $name = $qfq::getVar("name_de", "R"); if ( strpos( $name, $param['token'] ) !== false ) { $data[$name] = "green"; } else { $data[$name] = "red"; } return [$param['data'] => json_encode($data)]; }
- Template
{% set result = store.var.result|json_decode %} <h3>Twig from Function</h3> <ul> {% for name, color in result %} <li style="color: {{color}}">{{name}}</li> {% endfor %} </ul> {{ "p:1|t:Testlink" |qfqlink }}
Updated by Carsten Rose about 1 year ago
- Tracker changed from Support to Feature
- Target version changed from next3 to 23.6.0
Actions