-~~--FF0000:!Displaying your Own Table in TikiPro~~
|
+{maketoc} |
|
-!__Introduction__
|
-This is a BASIC tutorial that will show you how to make a quick package that loops through a table and displays its data. I wrote this because I am starting from the VERY beginning here in TikiPro, and want to make tutorials as I go to help new opensource developers who are joining the project and need a booster seat to sit at the table! I hope it is useful to you!
|
+ |
+!Introduction |
+This is a BASIC tutorial that will show you how to make a quick package that loops through a table and displays its data. I wrote this because I am starting from the VERY beginning here in bitweaver, and want to make tutorials as I go to help new opensource developers who are joining the project and need a booster seat to sit at the table! I hope it is useful to you! |
Thanks for your help Spiderr
|
|
-!__1) Create a New Package__
|
-* Go to the root of your tikipro installation and make a directory:
|
-** >mkdir newPackage
|
-** >mkdir newPackage/modules
|
-** >mkdir newPackage/templates
|
|
-!__2) Create your table (where your data lives)__
|
-* Using postgress, and a neet utility like [http://www.pgadmin.org/pgadmin3/index.php|pgAdmin3] create a database called test_table, and add two colums: nameid, and memo, or use the sql below
|
+!!1) Create a New bitweaverPackage |
+* Go to the root of your bitweaver installation and make a directory: |
+{CODE source='php' num='off'} |
+$ mkdir newPackage |
+$ mkdir newPackage/modules |
+$ mkdir newPackage/templates{CODE} |
+!!2) Create your table |
+* In your bitweaver database, create a table called ''test_table'', and add two colums: ''test_table_id'', and ''memo'', or use the sql below. Later we shall see how such tables can be created during plugin installation. |
+{CODE source='php' num='off'}-- Note: This first CREATE statement works for postgreSQL |
CREATE TABLE test_table
|
(
|
- nameid int2 NOT NULL,
|
- memo text[],
|
- CONSTRAINT test_table_pkey PRIMARY KEY (nameid)
|
+ test_table_id int NOT NULL, |
+ memo text[] |
+) WITHOUT OIDS; |
+-- |
+-- This CREATE TABLE statement works for MySQL and MSSQL |
+CREATE TABLE test_table |
+( |
+ test_table_id int NOT NULL, |
+ memo text |
+) |
+{CODE} |
+ |
+Insert several rows into the table. |
+{CODE source='php' num='off'}--These INSERT statements work for postgreSQL, MySQL and MSSQL |
+INSERT INTO test_table (test_table_id, memo) VALUES (1, 'The first memo' ); |
+INSERT INTO test_table (test_table_id, memo) VALUES (2, 'The second memo' ); |
+INSERT INTO test_table (test_table_id, memo) VALUES (3, 'The third memo' );{CODE} |
+ |
+!!3) Create your PHP file |
+* Go to __newPackage/__ and create a file called ''index.php'' |
+* Add the following lines |
+{CODE source='php' num='off'}<?php |
+ require_once('../bit_setup_inc.php'); //initialized the entire system! |
+ $result = $gBitDb->query("SELECT * FROM test_table"); |
+ $gBitSmarty->assign('test_table', $result->GetArray()); |
+ $gBitSystem->display( NEWPACKAGE_PKG_PATH . '/templates/newPackage.tpl', 'New Package Page' ); |
+?>{CODE} |
+!!4) Create your package's bit_setup_inc file |
+* Go to __newPackage/__ and create a file called ''bit_setup_inc.php'' |
+* Add the following lines: |
+{CODE source='php' num='off'}<?php |
+global $gBitSystem; |
+$gBitSystem->registerPackage( 'newPackage', dirname( __FILE__ ).'/' ); |
+if( $gBitSystem->isPackageActive( 'newPackage' ) ) { |
+ // ... maybe do some initialization stuff if your package is turned on |
+} |
+?>{CODE} |
+* For Bitweaver 2.0 you will want the file to look like this: |
+{CODE source='php' num='off'}<?php |
+global $gBitSystem; |
+$registerHash = array( |
+ 'package_name' => 'newPackage', |
+ 'package_path' => dirname( __FILE__ ).'/', |
+ 'homeable' => TRUE, |
);
|
+$gBitSystem->registerPackage( $registerHash ); |
|
-!__3) Create your php file (where the logic goes!)__
|
-* go to newPackage/ and create a file called index.php
|
-* add the following lines
|
-** <?php
|
-** require_once('../tiki_setup_inc.php'); //initialized the entire system!
|
-** $result = $gTikiSystem->query("SELECT * FROM test_table");
|
-** $smarty->assign('test_table', $result->GetArray()); //assigning the results into test_table creates a smarty variable that will be passed to your template!
|
+if( $gBitSystem->isPackageActive( 'newPackage' ) ) { |
+ // ... maybe do some initialization stuff if your package is turned on |
+} |
+?>{CODE} |
+!!5) Create your Smarty TPL file |
+* Now go to __newPackage/templates__ and create a file using pico, or whatever you use, called ''newPackage.tpl'' |
+* Add these lines: |
+{CODE source='php' num='off'}<table> |
+ {section name=colnum loop=$test_table} |
+ <tr> |
+ <td>{$test_table[colnum].test_table_id}</td> |
+ <td>{$test_table[colnum].memo}</td> |
+ </tr> |
+ {/section} |
+</table>{CODE} |
+Bitweaver uses the Smarty template engine, enriched with some custom functions. Read more about that on ((Smarty Functions)). |
|
-$gTikiSystem->display( 'tikipackage:newPackage/newPackage.tpl' );
|
-// this will will plop all data into the newPackage template you are going to make
|
-next
|
+!!6) Activate your new package |
+*Click Administration -> Kernel -> Packages |
+*Scroll down to find "newPackage" (the list is alphabetical) |
+*Check the box to enable the package |
+*Go all the way to the bottom and click the "Activate" button |
|
-?>
|
+!Voila! |
+Go to __http://yourbitweaverURL/newPackage/__ and your table should be displayed! |
|
-!__4) Create your tpl file (where the presentation goes!)__
|
-* Now go to newPackage/templates and create a file using pico, or whatever you use, called newPackage.tpl
|
-** add these lines:
|
-*** <table border=2>
|
-** {section name=colnum loop=$test_table}
|
-** <tr>
|
-** <td>{$test_table[colnum].nameid}</td>
|
-** <td>{$test_table[colnum].memo}</td>
|
-** {/section}
|
-** </table>
|
+!!7a) Now, create a Module |
+* To create a module (a little box that you can display in the left or right columns) with a pointer to your awesome new package, we will use the modules directory you created in step 1 |
+* Create a file using pico, or whatever text editor you use, called ''mod_newPackage.tpl''. |
+* The file name must be formated like this so bitweaver can include it in the __Administration / Modules__ dropdown list. |
+* Add these lines to the file: |
+{CODE source='php' num='off'}<table> |
+ <tr> |
+ <td class="boxtitle"><b>Planning</b> |
+</td> |
+ </tr> |
+ <tr> |
+ <td><a href="{$smarty.const.NEWPACKAGE_PKG_URL}index.php"> |
+ { biticon ipackage=newPackage iname=iconname iexplain="this is a cool icon"}My New Package</a></td> |
+ </tr> |
+</table>{CODE} |
+(:exclaim:) __$smart.const.whatever_PKG_URL__ is a pointer to a folder called whatever in the root... |
+to use icons check out our cool new icon system called ((function_biticon|biticon)) |
|
-Voila!
|
-Go to http://yourTikiProURL/newPackage/
|
-and your table should be displayed!
|
+!!7b) Add menu entries |
+Maybe you chose your package be no module. Maybe you have additional functionality that shall plugin into Bitweaver's menu bar. This is a two step procedure. |
|
-!__5) Now, create a module (a little box that you can display in the left or right columns) with a pointer to your awesome new package
|
+First create your templates/menu_newPackage.tpl file with the menu items you want to add. |
+{CODE source='php' num='off'} |
+<ul> |
+ <li><a class="item" href="{$smarty.const.NEWPACKAGE_PKG_URL}index.php">{tr}New Package Home{/tr}</a></li> |
+ <li><a class="item" href="{$smarty.const.NEWPACKAGE_PKG_URL}view1.php">{tr}View Something{/tr}</a></li> |
+ <li><a class="item" href="{$smarty.const.NEWPACKAGE_PKG_URL}view2.php">{tr}View something else{/tr}</a></li> |
+</ul> |
+{CODE} |
|
-* mkdir newPackage/modules and create a file using pico, or whatever you use, called mod_newPackage.tpl.
|
-* The file name must be formated like this so the tikisystem can include it in the administration --> modules -> dropdown list.
|
+Then register the menu in bit_setup_inc.php. |
+{CODE source='php' num='off'} |
+if( $gBitSystem->isPackageActive( 'newPackage' ) ) { |
+ $menuHash = array( |
+ 'package_name' => NEWPACKAGE_PKG_NAME, |
+ 'index_url' => NEWPACKAGE_PKG_URL.'index.php', |
+ 'menu_template' => 'bitpackage:eventcal/menu_newPackage.tpl', |
+ ); |
+ $gBitSystem->registerAppMenu( $menuHash ); |
+} |
+{CODE} |
+To read more about menus, read ((Adding YOUR OWN dropdown menu to the Nav bar!)). |
|
-* add these lines to the file:
|
+!!8) List of available constants in bitweaver |
+ |
+-=automagically generated constants for each package of the form=- |
+<PACKAGE>_PKG_PATH --> example: WIKI_PKG_PATH |
+this will give you the full path to the wiki folder |
+<PACKAGE>_PKG_URL --> example: WIKI_PKG_URL |
+this will give you the full url to the wiki folder |
+ |
+-=in addition there are a few more=- |
+these contain the full path and url to the root of the application |
+BIT_ROOT_PATH |
+BIT_ROOT_URL |
+ |
+contains the table name prefix as given in the install script |
+BIT_DB_PREFIX |
+ |
+contains the name of the currently active package |
+ACTIVE_PACKAGE |
+ |
+full path and url to the currently active style |
+THEMES_STYLE_PATH |
+THEMES_STYLE_URL |
+ |
+Stay tuned for more Tutorials! |
+Fire |
+ |
+!!9)Make the package installable |
+In order to make the package installable, you need an additional directory in newPackage/admin |
+{CODE source='php' num='off'}$ mkdir newPackage/admin{CODE} |
+and the schema information to chack the database with which comes in the form of a schema_inc.php file. In case you want to create columns with other data types, see ((DataDict)). |
+The sample for this package is |
+{CODE source='php' num='off'} |
+<?php |
+ |
+$tables = array( |
+ |
+'test_table' => " |
+ test_table_id I4 NOTNULL PRIMARY, |
+ memo X |
+", |
+ |
+); |
|
-<table cellpadding=4 border=2>
|
- <tr>
|
- <td class="boxtitle"><b>Planning</b><br></td>
|
- </tr>
|
- <tr>
|
- <td><a href="{$gTikiLoc.newPackage_PKG_URL/index.php">
|
- <img src="{$gTikiLoc.IMG_PKG_URL}icons/acoolicon.gif"
|
- class="icon"
|
- alt="{tr}my new package{/tr}"
|
- title="{tr}my new package{/tr}" />
|
- Weekly Plans</a></td>
|
- </tr>
|
-</table>
|
+global $gBitInstaller; |
|
-(:exclaim:)//$gTikiLoc.whatever_PKG_URL is a pointer to a folder called whatever in the root
|
-//and is a very cool way of accessing icons... check out the IMG folder to fancy up
|
-//your site!
|
+foreach( array_keys( $tables ) AS $tableName ) { |
+ $gBitInstaller->registerSchemaTable( NEWPACKAGE_PKG_NAME, $tableName, $tables[$tableName] ); |
+} |
|
+$gBitInstaller->registerPackageInfo( NEWPACKAGE_PKG_NAME, array( |
+ 'description' => "A test package.", |
+ 'license' => '<a href="http://www.gnu.org/licenses/licenses.html#LGPL">LGPL</a>', |
+ 'version' => '0.1', |
+ 'state' => 'beta', |
+ 'dependencies' => '', |
+) ); |
+?> |
+{CODE} |
+To add a nice looking icon besides the package name, simply create an icons folder inside your newpackage directory and drop a file named newpackage.png there. |
|
+!!10)Populate database |
+By providing sample data you can populate the database during module install time. See ((Installer Data Pump)) for more information. |
|
-I hope this helps! |
+!!11)Further reading |
+*Have a look at the ((SamplePackage)) and its explanation ((SamplePackageDissection)). |
+*If you want to add automated testing, read ((TestingSuites)). |
+*Become a template whizard by reading ((Smarty Functions)). |
+*Think of sorting your list results? Consider using ((function_smartlink)) as column header. |
+*Missing: Search integration. How does the search engine know about the new tables? |