[FX.php List] Browsing a set of found records
Gjermund Gusland Thorsen
ggt667 at gmail.com
Sun Aug 20 14:18:20 MDT 2006
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
>
More information about the FX.php_List
mailing list