By: Martin
Date: 2015-12-16
Time: 16:34
|
Grouping multidimensional datas with tables
Hi,
I'm struggling with my phone list. Actually I want to create a phone list from grouped by branches. So I have two arrays:
$arrBranches = array(
array('BRANCH_ID' => 3, 'BRANCH_NAME' => 'Berlin'),
array('BRANCH_ID' => 4, 'BRANCH_NAME' => 'Paris'),
array('BRANCH_ID' => 5, 'BRANCH_NAME' => 'London')
);
$arrEmployees = array(
array('BRANCH_ID' => 4, 'NAME' => 'Ford', 'FIRSTNAME' => 'Harrison', 'PHONE' => '12345'),
array('BRANCH_ID' => 3, 'NAME' => 'Douglas', 'FIRSTNAME' => 'Michael', 'PHONE' => '34567'),
array('BRANCH_ID' => 3, 'NAME' => 'Steward', 'FIRSTNAME' => 'Patrick', 'PHONE' => '89321')
);
|
Now I want to group the phone list by the branch name. The relations are done by the BRANCH_ID. For each branch there have to be an own table. My .odt looks like this:
[main;block=begin;sub]
Branch: [main.BRANCH_NAME]
---------------------------------------------------------------------------------------------------------
| NAME | PHONE |
---------------------------------------------------------------------------------------------------------
|[main_sub.FIRSTNAME;block=table:table-row;p1=[main.BRANCH_ID]] | [main_sub.PHONE] |
---------------------------------------------------------------------------------------------------------
[main;block=end]
|
And here is the PHP part:
$TBS->MergeBlock('main', 'array', $arrBranches );// Main block
$TBS->MergeBlock('sub', 'array', $arrEmployees); // Sub block. $data must be a global variable to have this working
|
The output shows the branches above the table, but the table rows are not filled up with the employee datas.
Some help would be great.
Regards
Martin
|
By: Skrol29
Date: 2015-12-16
Time: 17:06
|
Re: Grouping multidimensional datas with tables
Hi Martin,
You cannot use sub-block with a sub-data structured as you have.
In sub-data, the parameter must be a key not a value.
Your snippet could work if you had:
$arrEmployees = array(
4 => array(
array('NAME' => 'Ford', 'FIRSTNAME' => 'Harrison', 'PHONE' => '12345'),
),
3 => array(
array('NAME' => 'Douglas', 'FIRSTNAME' => 'Michael', 'PHONE' => '34567'),
array('NAME' => 'Steward', 'FIRSTNAME' => 'Patrick', 'PHONE' => '89321'),
),
);
$TBS->MergeBlock('main', 'array', $arrBranches );
global $arrEmployees;
$TBS->MergeBlock('sub', 'array', 'arrEmployees[%p1%]');
|
The best solution, I think, is to restructure your $arrBranches data and use automatic sub-block instead of sub-block with dynamic query.
That is :
$arrBranches = array(
array('BRANCH_ID' => 3, 'BRANCH_NAME' => 'Berlin', 'employees' => array(
array('BRANCH_ID' => 3, 'NAME' => 'Douglas', 'FIRSTNAME' => 'Michael', 'PHONE' => '34567'),
array('BRANCH_ID' => 3, 'NAME' => 'Steward', 'FIRSTNAME' => 'Patrick', 'PHONE' => '89321')
)),
array('BRANCH_ID' => 4, 'BRANCH_NAME' => 'Paris', 'employees' => array(
array('BRANCH_ID' => 4, 'NAME' => 'Ford', 'FIRSTNAME' => 'Harrison', 'PHONE' => '12345'),
)),
array('BRANCH_ID' => 5, 'BRANCH_NAME' => 'London', 'employees' => array()),
);
$TBS->MergeBlock('main', 'array', $arrBranches );
|
And at the template side:
Branch: [main.BRANCH_NAME;block=tbs:p+tbs:table;sub1=employees]
------------------------------------------------------------------------------
| NAME | PHONE |
------------------------------------------------------------------------------
|[main_sub1.FIRSTNAME;block=tbs:row] | [main_sub.PHONE] |
------------------------------------------------------------------------------
|
|