Jump to:

7939 Posts in 1472 Topics by 944 members

DataObjectManager Module

SilverStripe Forums » DataObjectManager Module » Help with basic table - managed via modelAdmin - with display limit & multiple page results

Discuss the DataObjectManager module, and the related ImageGallery module.

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

Page: 1 2 3 4 5
Go to End
Author Topic: 2225 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!!

  • UncleCheese
    Avatar
    4085 Posts

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

    First, your ProductList function has its limit hardcoded, so you're negating any possible pagination. I'm not sure what that function is doing in Page.php. Wouldn't you want it in a controller specifically for this product list page? Unless you're showing the product list on multiple page types, I don't think it belongs there.

    Here's your new function:

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

    As for the serachform, you're trying to repurpose the site search for something entirely different. You'll need to create a custom search form.

    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);
    );
    }

  • CHD
    Avatar
    Community Member
    217 Posts

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

    amazingly fast reply, thanks!
    that code looks great, i'll test this evening and get back to you!!

    thanks again.

  • CHD
    Avatar
    Community Member
    217 Posts

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

    well the first half worked perfectly!
    http://www.worldaircraftsolutions.com.sg/catalogue/

    but not sure where to paste the second half? (search coding)
    i tried putting it into page.php but then the site wouldnt load up.

    am i supposed to paste that somewhere else? (im using 2.4 btw)

    p.s - i pasted everything into page.php for now, just to keep it in one place, once i figure it all out and it works i'll separate the code into its relevant pages.

  • UncleCheese
    Avatar
    4085 Posts

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

    The search form can go in your ProductPage_Controller class or whatever controller you're using on that page.

    And then of course you need to add $ProductSearchForm to that template.

  • CHD
    Avatar
    Community Member
    217 Posts

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

    hmmm still cant figure it out.

    ive put it all in my Catalogue.php file:

    <?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 {

    }

    ?>

    but now the site wont load.
    (it works fine when i take out the search part)

    where am i going wrong?

    thanks so much for your help!

  • UncleCheese
    Avatar
    4085 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

    Well as soon as i upload the file, then reload the site i just get a blank white screen. Im sure firebug could tell you more but i dont know how to use it for debugging! (i only use it to see css in action etc)

    2225 Views
Page: 1 2 3 4 5
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.