_type = 'opensearch'; // Set mime type $this->_mime = 'application/opensearchdescription+xml'; // Add the URL for self updating $update = new JOpenSearchUrl; $update->type = 'application/opensearchdescription+xml'; $update->rel = 'self'; $update->template = JRoute::_(JUri::getInstance()); $this->addUrl($update); // Add the favicon as the default image // Try to find a favicon by checking the template and root folder $app = JFactory::getApplication(); $dirs = array(JPATH_THEMES . '/' . $app->getTemplate(), JPATH_BASE); foreach ($dirs as $dir) { if (file_exists($dir . '/favicon.ico')) { $path = str_replace(JPATH_BASE . '/', '', $dir); $path = str_replace('\\', '/', $path); $favicon = new JOpenSearchImage; $favicon->data = JUri::base() . $path . '/favicon.ico'; $favicon->height = '16'; $favicon->width = '16'; $favicon->type = 'image/vnd.microsoft.icon'; $this->addImage($favicon); break; } } } /** * Render the document * * @param boolean $cache If true, cache the output * @param array $params Associative array of attributes * * @return The rendered data * * @since 11.1 */ public function render($cache = false, $params = array()) { $xml = new DOMDocument('1.0', 'utf-8'); if (defined('JDEBUG') && JDEBUG) { $xml->formatOutput = true; } // The OpenSearch Namespace $osns = 'http://a9.com/-/spec/opensearch/1.1/'; // Create the root element $elOs = $xml->createElementNS($osns, 'OpenSearchDescription'); $elShortName = $xml->createElementNS($osns, 'ShortName'); $elShortName->appendChild($xml->createTextNode(htmlspecialchars($this->_shortName))); $elOs->appendChild($elShortName); $elDescription = $xml->createElementNS($osns, 'Description'); $elDescription->appendChild($xml->createTextNode(htmlspecialchars($this->description))); $elOs->appendChild($elDescription); // Always set the accepted input encoding to UTF-8 $elInputEncoding = $xml->createElementNS($osns, 'InputEncoding'); $elInputEncoding->appendChild($xml->createTextNode('UTF-8')); $elOs->appendChild($elInputEncoding); foreach ($this->_images as $image) { $elImage = $xml->createElementNS($osns, 'Image'); $elImage->setAttribute('type', $image->type); $elImage->setAttribute('width', $image->width); $elImage->setAttribute('height', $image->height); $elImage->appendChild($xml->createTextNode(htmlspecialchars($image->data))); $elOs->appendChild($elImage); } foreach ($this->_urls as $url) { $elUrl = $xml->createElementNS($osns, 'Url'); $elUrl->setAttribute('type', $url->type); // Results is the default value so we don't need to add it if ($url->rel != 'results') { $elUrl->setAttribute('rel', $url->rel); } $elUrl->setAttribute('template', $url->template); $elOs->appendChild($elUrl); } $xml->appendChild($elOs); parent::render(); return $xml->saveXML(); } /** * Sets the short name * * @param string $name The name. * * @return JDocumentOpensearch instance of $this to allow chaining * * @since 11.1 */ public function setShortName($name) { $this->_shortName = $name; return $this; } /** * Adds an URL to the OpenSearch description. * * @param JOpenSearchUrl $url The url to add to the description. * * @return JDocumentOpensearch instance of $this to allow chaining * * @since 11.1 */ public function addUrl(JOpenSearchUrl $url) { $this->_urls[] = $url; return $this; } /** * Adds an image to the OpenSearch description. * * @param JOpenSearchImage $image The image to add to the description. * * @return JDocumentOpensearch instance of $this to allow chaining * * @since 11.1 */ public function addImage(JOpenSearchImage $image) { $this->_images[] = $image; return $this; } } /** * JOpenSearchUrl is an internal class that stores the search URLs for the OpenSearch description * * @package Joomla.Platform * @subpackage Document * @since 11.1 */ class JOpenSearchUrl { /** * Type item element * * required * * @var string * @since 11.1 */ public $type = 'text/html'; /** * Rel item element * * required * * @var string * @since 11.1 */ public $rel = 'results'; /** * Template item element. Has to contain the {searchTerms} parameter to work. * * required * * @var string * @since 11.1 */ public $template; } /** * JOpenSearchImage is an internal class that stores Images for the OpenSearch Description * * @package Joomla.Platform * @subpackage Document * @since 11.1 */ class JOpenSearchImage { /** * The images MIME type * * required * * @var string * @since 11.1 */ public $type = ""; /** * URL of the image or the image as base64 encoded value * * required * * @var string * @since 11.1 */ public $data = ""; /** * The image's width * * required * * @var string * @since 11.1 */ public $width; /** * The image's height * * required * * @var string * @since 11.1 */ public $height; }