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 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
test_table_id int NOT NULL,
memo text[]
-- This CREATE TABLE statement works for MySQL and MSSQL
CREATE TABLE test_table
test_table_id int NOT NULL,
memo text

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' );
!!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
* 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 );

if( $gBitSystem->isPackageActive( 'newPackage' ) ) {
// ... maybe do some initialization stuff if your package is turned on
!!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}

!!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

Go to __http://yourbitweaverURL/newPackage/__ and your table should be displayed!

!!7) 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>
<td class="boxtitle"><b>Planning</b>
<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>
(: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))

!!8) List of available constants in bitweaver

-=automagically generated constants for each package of the form=-
this will give you the full path to the wiki folder
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

contains the table name prefix as given in the install script

contains the name of the currently active package

full path and url to the currently active style

Stay tuned for more Tutorials!

!!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'}

$tables = array(

'test_table' => "
test_table_id I4 NOTNULL PRIMARY,
memo X


global $gBitInstaller;

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' => '',
) );
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.

!!11)Further reading
Have a look at the ((SamplePackage)) and its explanation ((SamplePackageDissection)).
Page History
14 Jan 2007 (13:14 UTC)
Add reference for testing
Current • Source
View • Compare • Difference • Source
View • Compare • Difference • Source
View • Compare • Difference • Source
View • Compare • Difference • Source
View • Compare • Difference • Source
View • Compare • Difference • Source
View • Compare • Difference • Source
View • Compare • Difference • Source
View • Compare • Difference • Source
View • Compare • Difference • Source
View • Compare • Difference • Source
View • Compare • Difference • Source
View • Compare • Difference • Source
View • Compare • Difference • Source
View • Compare • Difference • Source
View • Compare • Difference • Source
View • Compare • Difference • Source
View • Compare • Difference • Source
Sean Lee71.241.129.17423
View • Compare • Difference • Source
View • Compare • Difference • Source
Sean Lee71.241.129.17421
View • Compare • Difference • Source
Jan Lindåker81.229.122.24919
View • Compare • Difference • Source
Simon Benedicic193.77.101.1418
View • Compare • Difference • Source
Lester Caine81.138.11.13617
View • Compare • Difference • Source
Lester Caine81.138.11.13616
View • Compare • Difference • Source