[FX.php List] Browsing a set of found records
Jonathan Schwartz
jonathan at eschwartz.com
Sun Aug 20 23:24:34 MDT 2006
Care to share the scripts lines that create the
array from the initial query and then the steps
to pull walk the array to pull them out again?
Thanks
Jonathan
At 12:19 AM -0500 8/21/06, Dale Bengston wrote:
>This is exactly how I do it.
>
>Dale
>
>On Aug 20, 2006, at 3:18 PM, Gjermund Gusland Thorsen wrote:
>
>>I think you should do you first search, put all the recids from the
>>selection in an array of $_SESSION and from there do a search by an
>>offset in the $_SESSION['selectionRecid']
>>
>>ggt667
>>
>>On 8/20/06, Jonathan Schwartz <jonathan at eschwartz.com> wrote:
>>>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
>>>
>>>_______________________________________________
>>>FX.php_List mailing list
>>>FX.php_List at mail.iviking.org
>>>http://www.iviking.org/mailman/listinfo/fx.php_list
>>>
>>_______________________________________________
>>FX.php_List mailing list
>>FX.php_List at mail.iviking.org
>>http://www.iviking.org/mailman/listinfo/fx.php_list
>
>_______________________________________________
>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