Forums / Developer / What kind of data should be sended to template from module?

"Please Note:
  • At the specific request of Ibexa we are changing this projects name to "Exponential" or "Exponential (CMS)" effective as of August, 11th 2025.
  • This project is not associated with the original eZ Publish software or its original developer, eZ Systems or Ibexa".

What kind of data should be sended to template from module?

Author Message

Jerry Jalava

Thursday 24 July 2003 5:00:19 am

Hi,

I'm building a new module and using a own database table for the data retrieve and saving... I would like to know what kind of array should I send to template as a result when fetch is done? (ie. "fetch(mymodule, list, hash(category, 1))" )

What kind of array the template need to receive from module if I wanted to show ie. "name" and "photo" info list from database?
How do I put them in right place in the template? (ie. "$List:item.name")

Lets say my database would be like this:
Table mymodule
Rows id,category,name,photo

I use arrayquery to get the data from table to variable witch I need return to template...

What kind of array does the arrayquery make to the variable?
Should I parse it somehow before sending it to template?

I think answers to these questions would get me finnish this module... I really wish that I get answers 'cause these few modules are the last thing I have to do to this Portal project I'm building with eZ...

Thanks,
Jerry

Jerry Jalava

Thursday 24 July 2003 10:01:01 am

Please someone give me even a hint, 'cause I'm desperate... I really need to find this out. I'm runnin' out of time... I should do four modules in three weeks, but I haven't even got the first one ready, 'cause there are some things I need to know about modules before I can continue...

Regards,
Jerry

Esben Maaløe

Thursday 24 July 2003 3:41:16 pm

If you got your fingers buried that deep in the fetch function - why not look at the arrays that other fetch'es give ?

Use

print_r( $returnArray )

And you can see exactly how those arrays are put together ?

I am in the same bind as you are with a deadline - and I need to know exactly what files implements the fetch function. The fetch in the upcoming 3.2 is able to do sorting and filtering - the 3.1 is not. I need to know what files to patch - can you help me ?

Francisco Felix

Friday 25 July 2003 1:51:54 pm

I have read the documentation but I havent a fair amount of information on developing custom modules.

As you have to develop four of them I am shure you at this time know a lot more about it than I, Would you please give me some pointers or advice?

I really have read the online documentation but its not enough, probably I have not found the rigth one.

Best regards and thanks in advance.

Jerry Jalava

Friday 25 July 2003 3:21:51 pm

I'm sorry... :((( I just was wroting a big tutorial but then I accidently pressed the back button in my mouse.. :( And I lost it all... Grr... I think I'm too tired to write it again... Sorry

I try... But this time I write it in notepad...

Hates M$,
Jerry

Jerry Jalava

Friday 25 July 2003 4:08:09 pm

OK! I try to start from beginning again... :(
This isn't going to be as much documented example, 'cause I'm tired and pissed...

In this example we make a module named "mymodule".
"mymodule" has 1 view called "list".
We have one template where we use fetch to list all our data from our database table called "mytable".

Folders and files:
-----------
In your Exponential directory there is "extension"-folder (If not, create one).
Inside that folder we make folder for our module "mymodule".
Inside that folder we make folder structure like this:
(/extension/mymodule)/modules/mymodule
(extension/mymodule)/settings

The we create folder under the "standard" design.
/design/standard/templates/mymodule/

Inside folder: extension/mymodule/modules/mymodule,
we put all the files expect the "list.tpl" -file.

Inside folder: extension/mymodule/settings,
we put the module.ini.append file.

Inside folder: /design/standard/templates/mymodule/,
we will put the list.tpl -file.
-----------

1. Our module.ini.append file:
-----------
[ModuleSettings]
ExtensionRepositories[]=mymodule
-----------

2. The database:
-----------
We create a table named "mytable" to ez database and make 2 cells, "id" and "name".
We add some data to the table:
id name
1 First row
2 Second row
-----------

3. Our module.php file:
-----------
$Module = array( 'name' => 'mymodule' );

$ViewList = array();
$ViewList['list'] = array(
'script' => 'list.php',
"unordered_params" => array( "offset" => "Offset" ) );

What happens here is that we make a view "list" for the module,
witch points to file "list.php" and we send parameter "Offset" to it.
----------

4. Our list.php file:
----------
$Module =& $Params['Module'];

$Offset = $Params['Offset'];
if ( !is_numeric( $Offset ) )
$Offset = 0;

$viewParameters = array( 'offset' => $Offset );

include_once( 'kernel/common/template.php' );
$tpl =& templateInit();

$tpl->setVariable( 'view_parameters', $viewParameters );

$Result = array();
$Result['content'] = $tpl->fetch( "design:mymodule/list.tpl" );
$Result['path'] = array( array( 'url' => false,
'text' => 'MY Module' ),
array( 'url' => false,
'text' => 'List' ) );

In here we receive the parameters from module.php and send them forward to list.tpl with "setVariable" function.
Then we load the list.tpl to screen...
-----------

5. Our list.tpl file:
-----------
{let data_limit=10
data_list=fetch('mymodule','list',hash(offset,$view_parameters.offset,limit,$data_limit))}
<h1>All URLs</h1>
{section name=DATA loop=$data_list sequence=array(bglight,bgdark)}
<b>{$:item.id}</b>{$:item.name}
{/section}
{/let}

Actually we don't need that "data_limit" and "hash(offset...)" thing in our example now,
but it's there just to show how the Offset parameter goes around the files... ;)

Hint: {$:item.xxx} is the name of our database tables cell... ;)
-----------

6. Our fetch function:
-----------
To archieve in this we need 2 files: mymodulefunctioncollection.php and function_definition.php.

First, function_definition.php
-----
$FunctionList = array();
$FunctionList['list'] = array(
'name' => 'list',
'operation_types' => array( 'read' ),
'call_method' => array( 'include_file' => 'extension/mymodule/modules/mymodule/mymodulefunctioncollection.php',
'class' => 'MyModuleFunctionCollection',
'method' => 'fetchList' ),
'parameter_type' => 'standard',
'parameters' => array( array( array( 'name' => 'offset',
'required' => false,
'default' => false ),
array( 'name' => 'limit',
'required' => false,
'default' => false ) ) );
-----

Second, mymodulefunctioncollection.php:
-----
include_once( 'extension/mymodule/modules/mymodule/mymodule.php' );

class MyModuleFunctionCollection
{

function MyModuleFunctionCollection()
{
}

function &fetchList( $offset, $limit )
{
$parameters = array( 'offset' => $offset,
'limit' => $limit );
$lista =& Mymodule::fetchListFromDB( $parameters );

return array( 'result' => &$lista );
}

}

-----

Third, mymodule.php:
-----
include_once( 'kernel/classes/ezpersistentobject.php' );

class Mymodule extends eZPersistentObject
{

function Mymodule( $row )
{
$this->eZPersistentObject( $row );
}

function &definition()
{
return array( 'fields' => array(
'id' => array(
'name' => 'id',
'datatype' => 'integer',
'default' => 0,
'required' => true ),
'name' => array(
'name' => 'name',
'datatype' => 'string',
'default' => '',
'required' => true ) ),
'keys' => array( 'id' ),
'increment_key' => 'id',
'class_name' => 'mymodule',
'name' => 'mytable' );
}

function &fetchListFromDB( $parameters = array() )
{
return Mymodule::handleList( $parameters, false );
}

function &handleList( $parameters = array(), $asCount = false )
{
$parameters = array_merge( array( 'as_object' => true,
'offset' => false,
'limit' => false ),
$parameters );
$asObject = $parameters['as_object'];
$offset = $parameters['offset'];
$limit = $parameters['limit'];
$limitArray = null;
if ( !$asCount and $offset !== false and $limit !== false )
$limitArray = array( 'offset' => $offset,
'length' => $limit );

return eZPersistentObject::fetchObjectList( Mymodule::definition(),
null, null, null, $limitArray,
$asObject );
}

}
-----

Now we just login to our admin site and goto url: /mymodule/list.
We see our list.tpl showing the 2 variables from the database... (Hopefully)

I'm sorry but I cannot write anymore notes right now... I'm too tired. (And still pissed,
because I lost the original example what I was writing... It had a lot more notes and hints...)

Hope this helps,
Jerry

Esben Maaløe

Saturday 26 July 2003 3:10:44 am

Jerry - thnx a lot !!

BTW. I really hate loosing data like that - use Mozilla (Firebird) - It remembers the values you fill in even when you go forth and back