[FX.php List] Browsing a set of found records
Dale Bengston
dbengston at preservationstudio.com
Mon Aug 21 08:50:34 MDT 2006
It's a whole new world, but it's a really great world!
On Aug 21, 2006, at 9:31 AM, Jonathan Schwartz wrote:
> Yes. Thank you.
>
> Now on the learning about creating and manipulating arrays...
>
> I needed to learn this anyway. ;-)
>
> J
>
> At 9:13 AM -0500 8/21/06, Dale Bengston wrote:
>> I will share the concept I'm using, and leave the coding to you.
>>
>> I'm allowing people to page through records in "detail view" by
>> first presenting a "list view." As I write the list of records to
>> the page, I add each one's record key to a session array. If the
>> user clicks on a record in "list view" to go to "detail view," I
>> retrieve the single record's detailed field data, and as I write
>> the "detail view," I find the record's position in the session
>> array and write Previous and Next links to the records adjacent to
>> the selected record (with some smarts for wrapping around the
>> beginning and end of the found set). Loading the record keys as
>> the list is written to the page preserves the sort order and found
>> count, since it was generated by the sort/find of the last list of
>> records displayed.
>>
>> The next time you retrieve a list of records, and/or sort them by
>> clicking on the field titles in the header row (I allow most of my
>> lists to be re-sorted this way no the fly), the session array is
>> re-built with the new find/sort.
>>
>> Make sense?
>>
>> Dale
>>
>> On Aug 21, 2006, at 12:24 AM, Jonathan Schwartz wrote:
>>
>>> 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
>>>
>>> _______________________________________________
>>> 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
>
> _______________________________________________
> FX.php_List mailing list
> FX.php_List at mail.iviking.org
> http://www.iviking.org/mailman/listinfo/fx.php_list
More information about the FX.php_List
mailing list