Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

Data Model Questions

Help with basic table - managed via modelAdmin - with display limit & multiple page results


Reply

3 Posts   1028 Views

Avatar
CHD

26 August 2010 at 3:38am Community Member, 218 Posts

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!!

Avatar
Martijn

26 August 2010 at 12:51pm Community Member, 271 Posts

You might find this usefull:

http://doc.silverstripe.org/private:recipes:pagination
http://doc.silverstripe.org/searchcontext

Avatar
CHD

27 August 2010 at 11:37pm Community Member, 218 Posts

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!