Page 1 of 1

Instead of Pulling Category Title, Pull Items in Category

Posted: Tue Jan 04, 2011 7:39 am
by StudyRx
I am working with a component for Joomla called Zoo. It has elements that allow you to pull information from. It is far too detailed to get into to. I was just tossing this into the dark and see if anyone could shed some light. The support @ the developers forum is abysmal.

The following code displays the categories you select and it appears on the page linked to the category. The thing is I want to display the items within that category that I choose. Here is the code. Anybody know how to change it so it pulls the items from within the category rather than just the name itself?

Code: Select all

<?php

/**
* @package   ZOO Component
* @file      relatedcategories.php
* @version   2.3.0 December 2010
* @author    YOOtheme http://www.yootheme.com
* @copyright Copyright (C) 2007 - 2011 YOOtheme GmbH
* @license   http://www.gnu.org/licenses/gpl-2.0.html GNU/GPLv2 only
*/


/*

   Class: ElementRelatedCategories

       The category element class

*/

class ElementRelatedCategoryItems extends Element implements iSubmittable {

	

	/*

		Function: hasValue

			Checks if the element's value is set.



	   Parameters:

			$params - render parameter



		Returns:

			Boolean - true, on success

	*/	

	public function hasValue($params = array()) {

		$category_ids = $this->_data->get('category', array());

		$categories = YTable::getInstance('category')->getById($category_ids, true);

		return !empty($categories);

	}	

	

	/*

		Function: render

			Override. Renders the element.



	   Parameters:

            $params - render parameter



		Returns:

			String - html

	*/

	public function render($params = array()) {

	

		$category_ids = $this->_data->get('category', array());



		$category_links = array();

		$categories = YTable::getInstance('category')->getById($category_ids, true);

		foreach ($categories as $category) {

			$category_links[] = '<a href="'.RouteHelper::getCategoryRoute($category).'">'.$category->name.'</a>';

		}

		

		return ElementHelper::applySeparators($params['separated_by'], $category_links);

			

	}



	/*

	   Function: _edit

	       Renders the edit form field.

		   Must be overloaded by the child class.



	   Returns:

	       String - html

	*/	

	public function edit(){

		//init vars

		$multiselect = $this->_config->get('multiselect', array());



        $options = array();

        if (!$multiselect) {

            $options[] = JHTML::_('select.option', '', '-' . JText::_('Select Category') . '-');

        }



		$attribs = ($multiselect) ? 'size="5" multiple="multiple"' : '';



		return JHTML::_('zoo.categorylist', Zoo::getApplication(), $options, 'elements[' . $this->identifier . '][category][]', $attribs, 'value', 'text', $this->_data->get('category', array()));

	}



	/*

		Function: renderSubmission

			Renders the element in submission.



	   Parameters:

            $params - submission parameters



		Returns:

			String - html

	*/

	public function renderSubmission($params = array()) {

        return $this->edit();

	}



	/*

		Function: validateSubmission

			Validates the submitted element



	   Parameters:

            $value  - YArray value

            $params - YArray submission parameters



		Returns:

			Array - cleaned value

	*/

	public function validateSubmission($value, $params) {

        $options = array('required' => $params->get('required'));

		$messages = array('required' => 'Please choose a related category.');

        $validator = new YValidatorForeach(new YValidatorString($options, $messages), $options, $messages);

        $clean = $validator->clean($value->get('category'));



        $categories = array_keys($this->_item->getApplication()->getCategories());

        foreach ($clean as $category) {

            if (!empty($category) && !in_array($category, $categories)) {

                throw new YValidatorException('Please choose a correct category.');

            }

        }



		return array('category' => $clean);

	}



}



class ElementRelatedCategoryItemsData extends ElementData{

	

	public function encodeData() {		

		$xml = YXMLElement::create($this->_element->getElementType())->addAttribute('identifier', $this->_element->identifier);

		foreach($this->_params->get('category', array()) as $category) {

			$xml->addChild('category')->setData($category);

		}



		return $xml;			

	}



	public function decodeXML(YXMLElement $element_xml) {

		$data = array();

		if (isset($element_xml->category)) {

			$categories = array();

			foreach ($element_xml->category as $category) {

				$categories[] = (string) $category;

			}

			$this->set('category', $categories);

		}

		return $data;

	}	

	

}

	




Re: Instead of Pulling Category Title, Pull Items in Catego

Posted: Tue Jan 04, 2011 12:01 pm
by anantha

Code: Select all

foreach ($categories as $category) {

                        $category_links[] = '<a href="'.RouteHelper::getCategoryRoute($category).'">'.$category->name.'</a>';

                }

may be u have to loop through the $category again..like foreach($category as $categoryitem).