[FX.php List] Browsing a set of found records
Jonathan Schwartz
jonathan at eschwartz.com
Sun Aug 20 10:48:58 MDT 2006
Whoa! *That's* what I'm talking about!
It's going to take me a bit to work thru this. I
did try to adapt it for use and couldn't quite
make it work...yet. I am getting a blank table as
a result. Will advise if I can't figure it out.
Jonathan
At 3:58 PM +0200 8/20/06, Erik Andreas Cayré wrote:
>Content-Type: multipart/signed; micalg=sha1;
>boundary=Apple-Mail-13--466018973;
> protocol="application/pkcs7-signature"
>
>
>Den 20/08/2006 kl. 8.16 skrev Jonathan Schwartz:
>
>>This next enhancement has been on my wish list for a long time....
>>
>>After performing a search, I would like to
>>allow users to browse the resulting records,
>>one by one. To me, this is much more efficient
>>then: search/view list/display detail/return to
>>list/view next.
>>
>>I know that this means saving the resulting set
>>in an array and then walking the array. I just
>>don't know how.
>>
>>I imagine it must look a lot like the standard
>>for each code, along with explode. From the
>>current script which lists the found set:
>>
>> php foreach($searchResult['data'] as $key => $value) {
>>
>> echo "<td><a href=\"detail.php?recid=";
>> $recordDetails=explode('.',$key);
>> $currentRecord=$recordDetails[0];
>> echo $currentRecord."\">".$value['myfield'][0];
>> echo "</a></td>";
>>
>>In addition to echoing to screen, I'm guessing
>>that I need to create and populate an array.
>>
>>Or.....is this just a variation on PREV NEXT
>>links, where the groupsize is set to 1?
>>
>>Anyone want to steer me in the right direction?
>
>I took the challenge, since I'll need a similar
>feature on one of my sites soon.
>
>My test code is below. I hope it's readable, I
>put a few comments in to help...
>The code is not ready for production: check for
>valid user input are missing and there may be
>other stuff missing...
>
>All comments are welcome!
>
>Code:
><?php
> session_start(); // Let's us remember stuff accross page loads
> require_once ('FX/FX.php');
> require_once ('inc/system.php'); // DB connection constants etc.
>
>// Functions
> // Find products by name, without 'InnerArray'
> function findProducts($search)
> {
> global $fmshost;
> global $dataport;
> global $dbname;
> global $user;
> global $pass;
> $layout = 'products';
> $fx = new FX($fmshost, $dataport);
> $fx->SetDBData($dbname, $layout);
> $fx->SetDBUserPass($user, $pass);
> $fx->AddDBParam('webtexts_productname::da', $search);
> $return_data = $fx->FMFind(TRUE, 'object', FALSE);
>
> // Transform FM data into more useful array
> if (count($return_data) > 0) {
> $i = 1;
> foreach ($return_data AS $fmkey => $fmrecord) {
> list(
>$products[$i]['recid'], $test[$i]['modid'] ) =
>explode( '.', $fmkey );
> foreach ($fmrecord as $field => $value) {
> if (isset($value)) {
> $products[$i][$field] = $value;
> }
> }
> $i++;
> }
> return ($products);
> }
> return (NULL);
> }
>
> // Add link to string
> function addLink ($string, $URI = '')
> {
> $start = ($URI != '' ? '<a href="' . $URI . '">' : '');
> $end = ($URI != '' ? '</a>' : '');
> $html = $start . $string . $end;
> return ($html);
> }
>
> // Show navigation widget. Links using GET
> function showNavigationWidget ($count, $listRelativeURI, $current = 1)
> {
> $previous = '<<';
> $next = '>>';
> $list = 'List';
>
> $html = addlink ($previous,
>($current > 1 ? $_SERVER['PHP_SELF'] . '?id=' .
>($current - 1) : '')); // Link to previous record
> $html .= ' ' . addLink ($next,
>($current < $count ? $_SERVER['PHP_SELF'] .
>'?id=' . ($current + 1) : '')); // Add link to
>next record
> $html .= ' · ' . addLink
>($list, $_SERVER['PHP_SELF'] .
>$listRelativeURI); // Add link back to list
> return ($html);
> }
>
>// The page
> $head = '<!DOCTYPE html PUBLIC
>"-//W3C//DTD XHTML 1.0 Transitional//EN"
>"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
><head>
> <meta http-equiv="content-type" content="text/html; charset=utf-8" />
> <title>Test</title>
> <meta name="generator" content="BBEdit 8.2" />
></head>
>';
> $body = '
><body><div style="margin-left: auto; margin-right: auto; width: 500px;">
><form method="get" id="showproducts" name="showproducts">
><label for="search">Search product name: </label>
><input name="search" id="search" type="text"
>size="20" value="' . $_SESSION['search'] . '"/>
><button type="submit">Search</button>
></form>
>';
>
> if (isset($_GET['search'])) // Find and/or show list of products
> {
> if ($_GET['search'] != $_SESSION['search']) // New search
> {
> $_SESSION['products'] = findProducts ($_GET['search']);
> $_SESSION['foundCount'] =
>count ($_SESSION['products']);
> $_SESSION['search'] = $_GET['search'];
> }
>
> if ($_SESSION['products'] == NULL) // Didn't find anything
> {
> $body .= '<p>No matches
>found for search term "' . $_SESSION['search'] .
>'"<br>
>Please try another search term.</p>
>';
> } else { // Show the list
>
> $body .= '<table border="1">
><caption>List of ' . $_SESSION['foundCount'] . '
>products matching "' . $_SESSION['search'] .
>'"</caption>
>';
>
> foreach ($_SESSION['products'] AS $id => $product)
> {
> $body .=
>'<tr><td><a href="' . $_SERVER['PHP_SELF'] .
>'?id=' . $id . '">' . $product['id'] . ' ' .
>$product['webtexts_productname::da'] .
>(array_key_exists('webtexts_suppdata1::da',
>$product) ? ', ' .
>$product['webtexts_suppdata1::da'] : '') . '</a>
>';
> }
> $body .= '</table>
>';
> }
> }
>
> elseif (isset($_GET['id'])) // Show
>product details, with links for browsing
>
> {
> $body .= '<table border="1"
>width="450px"><caption>Details for product ' .
>$_GET['id'] . ' of ' . $_SESSION['foundCount'];
> $body .= ' · ' .
>showNavigationWidget($_SESSION['foundCount'],
>'?search=' . $_SESSION['search'], $_GET['id']) .
>'</caption>
><tr><th>Association<td>' .
>$_SESSION['products'][$_GET['id']]['associations::name']
>. '
><tr><th>Product name<td>' .
>$_SESSION['products'][$_GET['id']]['webtexts_productname::da']
>. (array_key_exists('webtexts_suppdata1::da',
>$_SESSION['products'][$_GET['id']]) ? ', ' .
>$_SESSION['products'][$_GET['id']]['webtexts_suppdata1::da']
>: '') . '
><tr><th>Product price<td>' . $_SESSION['products'][$_GET['id']]['price'] . '
>';
>
> $body .= '</table>
>';
> }
>
> $body .='</div>
></body>
></html>';
>
>print $head;
>print $body;
>?>
>
>
>
>
>---
>Erik Andreas Cayré
>Spangsbjerg Møllevej 169
>DK-6705 Esbjerg Ø
>
>Home Tel: +45 75150512
>Mobile: +45 40161183
>
>»If you can't explain it simply, you don't understand it well enough.«
>-- Albert Einstein
>
>»If you don't have time to do it right, when
>will you have time to do it over?«
>-- John Wooden, basketball coach
>
>
>
>Attachment converted: PowerBookG4 HD:smime.p7s ( / ) (0016C0F8)
>_______________________________________________
>FX.php_List mailing list
>FX.php_List at mail.iviking.org
>http://www.iviking.org/mailman/listinfo/fx.php_list
--
Jonathan Schwartz
FileMaker 8 Certified Developer
Associate Member, FileMaker Solutions Alliance
Schwartz & Company
jonathan at eschwartz.com
http://www.eschwartz.com
http://www.exit445.com
More information about the FX.php_List
mailing list