Небольшая заметка для тех кто хочет создать кнопки печать и поделиться ссылкой с друзьями для своего компонента написанного для Joomla

Для начала нам нужно создать помощник вида. Это обычный класс с статическими методами который расположен по адреcу components/имя_вашего_компонента/helpers/.

Назовем его допустим имя_компонента_icons.php. Я назвал файл blog_icons.php и создал в нем класс BlogIcons

Далее мы разместим в наш помощник вида следующий код:

<?php
// запрет прямого доступа
defined( '_JEXEC' ) or die;
//Статичный класс для создания кнопок печати и отправить ссылку по E-mail
class BlogIcons
{
	/**
	 * Метод для добавления кнопки отправить по E-mail
	 * @param $url
	 * @param array $attribs
	 * @return mixed
	 */
	static function email( $url, $attribs = array() )
	{
		//Подключаем клласс помощник для отправки писем
		require_once( JPATH_SITE . '/components/com_mailto/helpers/mailto.php' );
		//ссылка для открытия формы в всплывающем окне
		$url = 'index.php?option=com_mailto&tmpl=component&link=' . MailToHelper::addLink( $url );
		//настройки высплывающего окна
		$status = 'width=400,height=350,menubar=yes,resizable=yes';
		//изображение кнопки печати
		$text = JHtml::_( 'image', 'system/emailButton.png', JText::_( 'JGLOBAL_EMAIL' ), NULL, true );
		//праметры кнопки
		$attribs['title'] = JText::_( 'JGLOBAL_EMAIL' );
		$attribs['onclick'] = "window.open(this.href,'win2','" . $status . "'); return false;";
		//возвращаем сформированную кнопку отправки по email
		return JHtml::_( 'link', JRoute::_( $url ), $text, $attribs );
	}

	/**
	 * Метод для добавления кнопки печати
	 * @param $url
	 * @param array $attribs
	 * @return mixed
	 */
	static function print_popup( $url, $attribs = array() )
	{
		//добавляем ссылку которая сформирует окно печати
		$url .= '?tmpl=component&print=1&layout=default';
		//параметры окна печати
		$status = 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,height=480,directories=no,location=no';
		//Иконка печати
		$text = JHtml::_( 'image', 'system/printButton.png', JText::_( 'JGLOBAL_PRINT' ), NULL, true );
		//парамтры кнопки отправки
		$attribs['title'] = JText::_( 'JGLOBAL_PRINT' );
		$attribs['onclick'] = "window.open(this.href,'win2','" . $status . "'); return false;";
		$attribs['rel'] = 'nofollow';
		//возвращаем сформированную кнопку печати
		return JHtml::_( 'link', JRoute::_( $url ), $text, $attribs );
	}
}

Далее нам нужно подключить наш помощник вида в нужный нам вид для этого можно либо просто через функцию include или require подключить наш сайт, либо в виде в методе display() вызвать метод loadHelper и в аргументе этого метода указать имя файда с помошником вида:

public function display( $tpl = null )Х
	....
	$this->loadHelper( 'blog_icons' );
	....
	parent::display( $tpl );

}

Далее в нужном месте нашего шаблона вида вызвать эти два метода, в которых передадим ссылку на текущую запись:

<?php echo BlogIcons::email( JRoute::_( 'index.php?view=item&id=' . $id ) ); ?>
<?php echo BlogIcons::print_popup( JRoute::_( 'index.php?view=item&id=' . $id ) ); ?>

После чего в месте вставки этого кода появится следующее:
Пример отображения кнопок
При нажатии на эти кнопки будут появляться окна как на скрине ниже: Внешний вид окон печати и E-mail

Если вы хотите выводить не стандартные иконки печати или отправки ссылки по E-mail, а например текст "Распечатать" вместо картинки то в методе print_popup смените код:

$text = JHtml::_( 'image', 'system/printButton.png', JText::_( 'JGLOBAL_PRINT' ), NULL, true );

на

$text = '<span>>Печать</span>';

Либо введите тег img у которого в атрибуте src будет путь к новой картинке.

Для того что бы в печати избавиться от кнопок "Печать" и "E-mail" нужно дописать такой код:

<?php if ( JFactory::getApplication()->input->get( 'print', 0, 'int' ) != 1 ): ?>
<?php echo BlogIcons::email( JRoute::_( 'index.php?view=item&id=' . $id ) ); ?>
<?php echo BlogIcons::print_popup( JRoute::_( 'index.php?view=item&id=' . $id ) ); ?>
<?php endif; ?>