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.

DataObjectManager Module /

Discuss the DataObjectManager module, and the related ImageGallery module.

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

[SOLVED] Grouping Output


Go to End
Reply


3 Posts   1646 Views

Avatar
zenmonkey

Community Member, 532 Posts

25 August 2009 at 8:34am

Edited: 27/08/2009 8:42am

I have a list of Retailers and Distributors I want to output in the template sorted by continent, country and category

Below is the Data Object

class ProductSeller extends DataObject
{
	static $db = array (
		'SellerName' => 'Text',
		'SellerDescription' => 'Text',
		'SellerCategory' => "Enum('Retail, Distributor, Web')",
		'SellerLocation' => 'Text',
		'SellerContinent' => "Enum('NorthAmerica, SouthAmerica, Europe, Asia, Australia')",
		'SellerURL' => 'Text',
		'SellerPhone' => 'Text'
	);
	
	static $has_one = array (
		'WhereToBuyPage' => 'WhereToBuyPage'
	);
	
	public function getCMSFields_forPopup()
	{
		return new FieldSet(
			new TextField('SellerName'),
			new TextareaField('SellerDescription'),
			new DropdownField('SellerCategory','SellerCategory', singleton('ProductSeller')->dbObject('SellerCategory')->enumValues()),
			new CountryDropdownField('SellerLocation'),
			new DropdownField('SellerContinent','Continent', singleton('ProductSeller')->dbObject('SellerContinent')->enumValues()),
			new TextField('SellerURL'),
			new TextField('SellerPhone')
		);
	}
	
}

In the template I can group the SellerContinent and SellerCategory by if statements, however is there an easy way to group the countries without manually making an if statements for every country.

I wrote a function thats sorts the Data by country so worse comes to worse I can use the country as a class and jQuery the whole thing and just give the JavaScript-less people a sorted list.

function sortByCountry(){
		$countrys = DataObject::get("ProductSeller","", "SellerLocation");
		return $countrys;
	}

Thanks

Avatar
UncleCheese

Forum Moderator, 4096 Posts

25 August 2009 at 9:09am

Try this:

WhereToByPage.php

function Countries()
{
$countries = new DataObjectSet();
$results = DB::query("SELECT DISTINCT SellerLocation FROM ProductSeller ORDER BY SellerLocation ASC");
if($results) {
foreach($results as $result) {
$country = $result['SellerLocation'];
$countries->push(new ArrayData(array(
'Country' => $country,
'Sellers' => DataObject::get("ProductSeller","SellerLocation = '$country'")
)));
}
return $countries;
}

return false;
}

WhereToBuyPage.ss

<% control Countries %>
<h3>$Country</h3>
<ul>
<% control Sellers %>
<li>$SellerName</li>
<% end_control %>
</ul>
<% end_control %>

Can't promise it's free of syntax errors, but that's the idea.

Avatar
zenmonkey

Community Member, 532 Posts

27 August 2009 at 8:43am

Awesome. UncleCheese, You're the Best!