Gyroscope / Building a List View

The list view is usually invoked by clicking on a menu icon. For example, clicking on the "landlords" icon in the sample app displays a list of landlords on the left.

A fully functional list view performs the following actions:
  • sets the title of the left panel;
  • allows auto-complete search;
  • allows pagination;
  • loads related JavaScript functions (client handlers);
  • displays the record list

The number of list views in a Gyroscope application is predefined. In settings.php, the $viewcount variable sets the view count.

Each list view has an ID. For example, "lv0", "lv1", etc.

When adding more views, make sure there're enough list view containers in index.php.

The last view container is reserved for displaying lookups, so the view count is usually the number of entities + 1. When in doubt, allocate more views than needed.

Starting v4.4, the list view containers are automatically generated by the viewcount in settings.php.

Set up a template app. We'll gradually transform a blank application into the sample application.

Locate the section, in index.php, where the menu icons are defined:

<acronym title="Landlords">
<a href=#
  onmouseover="hintstatus('Landlords',this);"
  onclick="showview(0);">
    <img src="imgs/ico_landlords.gif">
</a>
</acronym>

The acronym tag gives a tool tip when the mouse hovers over the icon. The hintstatus function displays the same help text at the bottom of the view port.

New in v4.4, the toolbar icons are configured in a shared object in settings.php.
$toolbaritems=array(
 array('title'=>'List 1','viewindex'=>0,'icon'=>'img-big1'),
 array('title'=>'List 2','viewindex'=>1,'icon'=>'img-big2'),

 array('type'=>'break'), // divider

//hide in mobile view
 array('title'=>'A','viewindex'=>1,'icon'=>'img-big1',
      'noiphone'=>1),

//custom action
 array('title'=>'B','viewindex'=>1,'icon'=>'img-big1',
      'action'=>"alert('custom action');"),

//custom action without list view
 array('title'=>'C','viewindex'=>null,'icon'=>'img-big1',
      'action'=>"alert('custom action');"),

//custom entry
 array('type'=>'X',
      'desktop'=>'D','iphone'=>'<div class="menuitem">M</div>'),
);

To display a list view, call the showview function with its ID. This function subsequently calls the slvX service handler.

For example, showview(2) sends the slv2 message to myservices.php.

In myservices.php, add the list view handler:

switch($cmd){
  // ...
  case 'slv0':
    include 'icl/listlandlords.inc.php';
    listlandlords();
  break;
  // ...
}

Important: in iPhone mode, showview must be called with the force parameter in the toolbar. Otherwise the list view will not take over the screen in portrait mode:
showview(1,null,true);
Create icl/listlandlords.inc.php with the following content:

<?php function listlandlords(){   echo 'Landlord List'; }

Now load the app in a browser and click on the menu icon. Tada!
Next we'll display "Landlords" on the list view title:

<?php
function listlandlords(){
?>
<div class="section">
  Landlord List
</div>
<script>
  gid('tooltitle').innerHTML='<a>Landlords</a>';
</script>
<?
}

The "section" class is predefined in gyscope.css. It gives the content some margin.

Next we'll pull some records from the database. Import the sample database. You may use the sample app as an editing interface to add new records.

<?php
function listlandlords(){
  global $db;
  $query="select * from landlords.*, persons.* ";
  $query.=" from landlords, persons where ";
  $query.=" landlords.personid=persons.personid ";
  $query.=" order by persons.fname ";
?>
<div class="section">
<?
  $rs=sql_query($query,$db);
  while ($myrow=sql_fetch_array($rs)){
    $llid=$myrow['llid'];
    $llname=$myrow['fname'].' '.$myrow['lname'];
?>
<div class="listitem">
  <?echo $llname;?>
</div>
<?
  }//while
?>
</div>
<script>
  gid('tooltitle').innerHTML='<a>Landlords</a>';
</script>
<?
}//func

Next we'll add the hooks for displaying landlord details.

In the script section, detect whether a JavaScript function showlandlord has been loaded. If not, load the JavaScript file that defines all the landlord related handlers:

ajxjs(self.showlandlord, 'landlords.js');
In landlords.js, add the following lines:

showlandlord=function(llid,llname){
  addtab('landlord_'+llid, llname,'showlandlord&llid='+llid);
}

In myservices.js, add a server-side handler:

switch ($cmd){
  // ...
  case 'showlandlord':
    include 'icl/showlandlord.inc.php';
    showlandlord();
  break;
  // ...
}

Create icl/showlandlord.inc.php with the following content for now:

<?php
function showlandlord(){
  echo "Landlord details";
}
Now back in listlandlords.inc.php, we link the showlandlord event with each record:

<div class="listitem">
  <a onclick="showlandlord(<?echo $llid;?>,'<?echo $llname;?>');">
     <?echo $llname;?>
  </a>
</div>

In practice, we should guard against apostrophes in names:

  //...
  $dbllname=str_replace("'","\'",$llname);
?>
<div class="listitem">
  <a onclick="showlandlord(<?echo $llid;?>, '<?echo $dbllname;?>');">
    <?echo $llname;?>
  </a>
</div>
<?
}//while


Table of Content

Our Services

Targeted Crawlers

Crawlers for content extraction, restoration and competitive intelligence gathering.

Learn More

Gyroscope™ ERP Solutions

Fully integrated enterprise solutions for rapid and steady growth.

Learn More

E-Commerce

Self-updating websites with product catalog and payment processing.

Learn More