| VAR_ADD_BY_SQL | VAR_ADD_BY_SQL = {{!SELECT s.id AS ...| Specific values read from the database to fill the system store during QFQ |
| FILL_STORE_SYSTEM_BY_SQL | FILL_STORE_SYSTEM_BY_SQL = {{!SELECT s.id AS ...| Specific values read from the database to fill the system store during QFQ |
| | | load. See `VariablesAddBySql`_ for a usecase. |
| | | load. See `fillStoreSystemBySql`_ for a usecase. |
* *sqlBefore*: always fired (before any *sqlInsert*, *sqlUpdate*, ..)
* *sqlBefore*: always fired (before any *sqlInsert*, *sqlUpdate*, ..)
* *sqlInsert*: fired if *slaveId* == `0` or *slaveId* == `''`.
* *sqlInsert*: fired if *slaveId* == `0` or *slaveId* == `''`.
* *sqlUpdate*: fired if *slaveId* > `0`.
* *sqlUpdate*: fired if *slaveId* > `0`.
* *sqlDelete*: fired if *slaveId* > `0`, after *sqlInsert* or *sqlUpdate*. Be carefull not to delete filled records!
* *sqlDelete*: fired if *slaveId* > `0`, after *sqlInsert* or *sqlUpdate*. Be careful not to delete filled records!
Always add a check, if values given, not to delete the record! *sqlHonorFormElements* helps to skip such checks.
Always add a check, if values given, not to delete the record! *sqlHonorFormElements* helps to skip such checks.
* *sqlAfter*: always fired (after *sqlInsert*, *sqlUpdate* or *sqlDelete*).
* *sqlAfter*: always fired (after *sqlInsert*, *sqlUpdate* or *sqlDelete*).
* *sqlHonorFormElements*: list of *FormElement* names (this parameter is optional).
* *sqlHonorFormElements*: list of *FormElement* names (this parameter is optional).
...
@@ -4262,19 +4268,13 @@ FAQ
...
@@ -4262,19 +4268,13 @@ FAQ
Report
Report
======
======
The QFQ extension is activated through tt-content records. One or more tt-content records per page are necessary to render
*forms* and *reports*.
QFQ content element
QFQ content element
-------------------
-------------------
QFQ is used by configuring Typo3 content elements. Insert one or more QFQ content elements on a Typo3 page.
The QFQ extension is activated through tt-content records. One or more tt-content records per page are necessary to render
Specify column and language per content record as wished.
*forms* and *reports*. Specify column and language per content record as wished.
The title of the QFQ content element will not be rendered. It's only visible in the backend for orientation.
General
The title of the QFQ content element will not be rendered. It's only visible in the backend for orientation of the webmaster.
-------
To display a report on any given TYPO3 page, create a content element of type 'QFQ Element' (plugin) on that page.
To display a report on any given TYPO3 page, create a content element of type 'QFQ Element' (plugin) on that page.
...
@@ -4323,15 +4323,18 @@ Syntax of `report`
...
@@ -4323,15 +4323,18 @@ Syntax of `report`
For **each** row of a query (this means *all* queries), all subqueries will be fired once.
For **each** row of a query (this means *all* queries), all subqueries will be fired once.
* E.g. if the outer query selects 5 rows, and a nested query always select 3 rows, than the total number of rows are 5 x 3 = 15 rows.
* E.g. if the outer query selects 5 rows, and a nested query select 3 rows, than the total number of rows are 5 x 3 = 15 rows.
There is a set of **variables** that will get replaced before the SQL-Query gets executed:
There is a set of **variables** that will get replaced before the SQL-Query gets executed:
Column values of the recent rows: {{<level>.<columnname>}}
Variables from specific stores: {{<name>[:<store/s>[:...]]}}
Global variables: {{global.<name>}}
STORE_RECORD is automatically merged with the existing STORE_RECORD content and the current row. Use the STORE_RECORD
to access outer level values.
Variables from specific stores: {{<name>[:<store/s>[:<sanitize class>]]}}
Column values of a given row: {{<level>.<columnname>}}
Global variables: {{global.<name>}}
Current row index: {{<level>.line.count}}
Current row index: {{<level>.line.count}}
...
@@ -4344,22 +4347,21 @@ Syntax of `report`
...
@@ -4344,22 +4347,21 @@ Syntax of `report`
Be aware that line.count / line.total have to be known before the query is fired. E.g. `10.sql = SELECT {{10.line.count}}, ... WHERE {{10.line.count}} = ...`
Be aware that line.count / line.total have to be known before the query is fired. E.g. `10.sql = SELECT {{10.line.count}}, ... WHERE {{10.line.count}} = ...`
won't work as expected. `{{10.line.count}}` can't be replaced before the query is fired, but will be replaced during processing the result!
won't work as expected. `{{10.line.count}}` can't be replaced before the query is fired, but will be replaced during processing the result!
Different types of SQL queries are possible: SELECT, INSERT, UPDATE, DELETE, SHOW
Different types of SQL queries are possible: SELECT, INSERT, UPDATE, DELETE, SHOW
Only SELECT and SHOW queries will fire subqueries.
Only SELECT and SHOW queries will fire subqueries.
* Processing of the resulting rows and columns:
Processing of the resulting rows and columns:
* In general, all columns of all rows will be printed out sequentially.
* In general, all columns of all rows will be printed out sequentially.
On a per column base, printing of columns can be suppressed. This might be useful to select values which will be
* On a per column base, printing of columns can be suppressed by starting the columnname with an underscore '_'. E.g. `SELECT id AS _id`.
accessed later on in another query via the {{level.columnname}} variable. To suppress printing of a column, use a
This might be useful to store values, which will be used later on in another query via the `{{id:R}}` or `{{level.columnname}}` variable. To suppress printing of a column, use a
underscore as column name prefix.
underscore as column name prefix. E.g. `SELECT id AS _id`
Reserved column names have a special meaning and will be processed in a special way. See `Processing of columns in the SQL result`_ for details.
Reserved column names have a special meaning and will be processed in a special way. See `Processing of columns in the SQL result`_ for details.
There are extensive ways to wrap columns and rows automatically. See :ref:`wrapping-rows-and-columns`
There are extensive ways to wrap columns and rows automatically. See :ref:`wrapping-rows-and-columns`
Debug the bodytext
Debug the bodytext
------------------
------------------
...
@@ -4966,7 +4968,7 @@ is allowed to access: ::
...
@@ -4966,7 +4968,7 @@ is allowed to access: ::
page.10.value = Please access from localhost or log in as 'admin' user.
page.10.value = Please access from localhost or log in as 'admin' user.
[global]
[global]
..
.. _column_pageX:
Columns: _page[X]
Columns: _page[X]
^^^^^^^^^^^^^^^^^
^^^^^^^^^^^^^^^^^
...
@@ -5034,6 +5036,8 @@ The colum name is composed of the string *page* and a trailing character to spec
...
@@ -5034,6 +5036,8 @@ The colum name is composed of the string *page* and a trailing character to spec