[FX.php List] Browsing a set of found records
Dale Bengston
dbengston at preservationstudio.com
Sun Aug 20 23:19:19 MDT 2006
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
More information about the FX.php_List
mailing list