Project

General

Profile

Actions

Feature #14090

open

Nützliche _script funktionen

Added by Nicola Chiapolini 2 months ago. Updated about 1 month ago.

Status:
New
Priority:
Normal
Assignee:
Carsten Rose
Target version:
Start date:
19.04.2022
Due date:
% Done:

0%

Estimated time:
Discuss:

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?

Actions #1

Updated by Nicola Chiapolini 2 months ago

  • Description updated (diff)
Actions #2

Updated by Nicola Chiapolini 2 months 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>
    
Actions #3

Updated by Nicola Chiapolini 2 months 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 }}
    
Actions #4

Updated by Carsten Rose about 1 month ago

  • Tracker changed from Support to Feature
  • Target version changed from 22.8.0 to 22.6.0
Actions

Also available in: Atom PDF