[FX.php List] Browsing a set of found records

Jonathan Schwartz jonathan at eschwartz.com
Sun Aug 20 14:50:59 MDT 2006


I'm going to learn a lot from this challenge. ;-)

I'll need to read up on 1) creating and 
populating an array from the resulting query, and 
2) walking through the array with an offset.

Thanks


J



At 10:18 PM +0200 8/20/06, 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 = '&lt;&lt;';
>>>                $next = '&gt;&gt;';
>>>                $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 .= ' &middot; ' . 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 .= ' &middot; ' .
>>>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


-- 

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