Jump to:

3373 Posts in 998 Topics by 712 members

Data Model Questions

SilverStripe Forums » Data Model Questions » Help with basic table - managed via modelAdmin - with display limit & multiple page results

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

Page: 1
Go to End
Author Topic: 946 Views
  • CHD
    Avatar
    Community Member
    217 Posts

    Help with basic table - managed via modelAdmin - with display limit & multiple page results Link to this post

    Hi,

    fairly new to SS, but loving it so far.
    working on a site with a table of products.
    simple table, that can be managed via modelAdmin.

    i want the products to then be listed in a table on the frontend, with 25 per page, with next, previous links etc. then add a search box that searches ONLY the table of products. each product will not have its own page though, just sit in the table with a link to email/enquire about that product.

    so far, i have this:
    http://www.worldaircraftsolutions.com.sg/catalogue/

    to get to where i am, i created the following:

    in mysite>code>myCatalgueAdmin.php

    <?php
    class MyCatalogAdmin extends ModelAdmin {

    public static $managed_models = array( //since 2.3.2
    'Product'
    );

    static $url_segment = 'products'; // will be linked as /admin/products
    static $menu_title = 'Catalogue Admin';

    }
    ?>

    in mysite>code>Product.php:

    <?php
    class Product extends DataObject {

    static $db = array(
    'Title' => 'Varchar',
    'PartNumber' => 'Varchar',
    'SerialNumber' => 'Varchar',
    'AircraftRegistration' => 'Varchar',
    'Type' => 'Varchar',
    'AircraftSerial' => 'Varchar',
    'Quantity' => 'Varchar',
    'Price' => 'Currency'
    );

    static $summary_fields = array(
    'Title',
    'PartNumber',
    'SerialNumber'
    );

    static $searchable_fields = array(
    'Title',
    'PartNumber',
    'SerialNumber'
    );

    }
    ?>

    in mysite>code>Page.php:

    function ProductList ($limit = 25){
    $list = DataObject::get('Product', '', '', '', $limit);
    return $list;
    }

    then in themes>template>catalogue.ss

    <table id="ProductList" width="100%" border="0">
    <tr>
    <th width="">Title</th>
    <th width="">Part Number</th>
    <th width="">Serial Number</th>
    <th width="">Aircraft <br>
    Registration</th>
    <th width="">Type</th>
    <th width="">Aircraft <br>
    Serial</th>
    <th width="">Quantity </th>
    <th width="">Email us</th>
    </tr>
    <% if ProductList %>

    <!--$ProductList.sort(Title)-->
    <% control ProductList %>
    <tr height="20px">
    <td>$Title</td>
    <td>$PartNumber</td>
    <td>$SerialNumber</td>
    <td>$AircraftRegistration</td>
    <td>$Type</td>
    <td>$AircraftSerial</td>
    <td>$Quantity </td>
    <td><a href="mailto:test@test.com?subject=$Title">Email us</a> </td>
    </tr>

    <% end_control %>
    <a href="$ProductList.NextLink">Next</a>
    <a href="$ProductList.PrevLink">Previous</a>
    <% end_if %>

    </table>

    $SearchForm

    i cant figure out the following:
    A) am i even on the right track??
    B) how do i get the next and previous links to work? currently they just change append the URL with ?start=25 but the list doesn't change
    C) the search box searches the whole site (and seems to skip this table of products all together)

    if anybody can help with this i will be eternally grateful!

    thank you!!

  • Martijn
    Avatar
    Community Member
    271 Posts
  • CHD
    Avatar
    Community Member
    217 Posts

    Re: Help with basic table - managed via modelAdmin - with display limit & multiple page results Link to this post

    thanks a lot,

    i've made some advancements... the table, pagination, item limit etc are now all working fine.
    but im having some problems with search.
    the standard site search doesnt search the table of products... so i've been trying to create a custom search function (with the help of Uncle Cheese)

    here's my catalogue.php so far:

    <?php
    class Catalogue extends Page {
    public function ProductList ($filter = null){
    if(!isset($_REQUEST['start'])) $_REQUEST['start'] = 0;
    $limit = $_REQUEST['start'].",25";
    return DataObject::get('Product', $filter, null, null, $limit);
    }

    public function ProductSearchForm() {
    return new Form (
    $this,
    "ProductSearchForm",
    new FieldSet(new TextField('s','')),
    new FieldSet(new FormAction('doProductSearch','Search'))
    );
    }

    public function doProductSearch($data, $form) {
    if(isset($data['s'])) {
    $filter = "SomeField LIKE '%".Convert::raw2sql($data['s'])."%'";
    }
    return array (
    'ProductList' => $this->ProductList($filter)
    );
    }

    }

    class Catalogue_Controller extends Page_Controller {

    static $allowed_actions = array (
    'ProductSearchForm'
    );

    }

    ?>

    the problem is now, when i try a search it says the page does not exist, so we tried adding the allowed_actions to the controller, but now when i try and search it says "there has been an error"

    can anybody else shed some light on custom search?

    thanks in advance!

    946 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.