Joomla - Переопределение com_content

Joomla - Переопределение com_content

Когда я делал редизайн своего сайта я решил отказаться, от так полюбившийся мне k2, в пользу родного com_content. А так как я большой любитель делать все «чисто» без переопределения ни куда.

Общая информация

Переопределение - это файлы, который загружаются вместо нормальных файлов ядра.

В данном руководстве я не буду полностью про то что такое переопределение и про то как переопределять макеты, для этого есть прекрастная статья на cmscafe . А уделю все свое внимание одному из аспектов, а именно переопределению xml файла.

Помимо простого переопределения стандартные компоненты joomla позволяют в переопределения создавать xml файлы тем самым, давая возможность создавать свои типы пунктов меню. В этот раз мы будем разбирать создание такого файла com_content

XML Файл

Сам файл назовем его category.xml со всем, на мой взгляд самыми важными настройками, выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<metadata>
	<layout title="JCATEGORY" option="COM_CONTENT_CATEGORY_VIEW_DEFAULT_OPTION">
		<help key="JHELP_MENUS_MENU_ITEM_ARTICLE_CATEGORY_LIST"/>
		<message>
			<![CDATA[COM_CONTENT_CATEGORY_VIEW_DEFAULT_DESC]]>
		</message>
	</layout>
	<fields name="request">
		<fieldset name="request" addfieldpath="/administrator/components/com_categories/models/fields">
			<field name="id" type="modal_category"
				label="JGLOBAL_CHOOSE_CATEGORY_LABEL"
				description="JGLOBAL_CHOOSE_CATEGORY_DESC"
				extension="com_content"
				required="true"
				select="true"
				new="true"
				edit="true"
				clear="true"/>
			<field name="filter_tag" type="tag"
				label="JTAG"
				description="JTAG_FIELD_SELECT_DESC">
				<option value="">JNONE</option>
			</field>
		</fieldset>
	</fields>
	<fields name="params">
		<fieldset name="basic" label="COM_MENUS_BASIC_FIELDSET_LABEL">
			<field name="layout_type" type="hidden" default="category" />
			<field name="article_layout" type="hidden" default="article" />
			<field name="display_num" type="text" 
				label="JGLOBAL_NUMBER_ITEMS_LIST_LABEL"
				description="JGLOBAL_NUMBER_ITEMS_LIST_DESC"
				size="3"
				default="5"/>
			<field name="show_subcategory_content" type="list"
				label="JGLOBAL_SHOW_SUBCATEGORY_CONTENT_LABEL"
				description="JGLOBAL_SHOW_SUBCATEGORY_CONTENT_DESC"
				useglobal="true">
				<option value="0">JNONE</option>
				<option value="-1">JALL</option>
				<option value="1">J1</option>
				<option value="2">J2</option>
				<option value="3">J3</option>
				<option value="4">J4</option>
				<option value="5">J5</option>
			</field>
			<field name="orderby_pri" type="list"
				label="JGLOBAL_CATEGORY_ORDER_LABEL"
				description="JGLOBAL_CATEGORY_ORDER_DESC"
				useglobal="true">
				<option value="none">JGLOBAL_NO_ORDER</option>
				<option value="alpha">JGLOBAL_TITLE_ALPHABETICAL</option>
				<option value="ralpha">JGLOBAL_TITLE_REVERSE_ALPHABETICAL</option>
				<option value="order">JGLOBAL_CATEGORY_MANAGER_ORDER</option>
			</field>
			<field name="orderby_sec" type="list"
				label="JGLOBAL_ARTICLE_ORDER_LABEL"
				description="JGLOBAL_ARTICLE_ORDER_DESC"
				useglobal="true">
				<option value="front">COM_CONTENT_FEATURED_ORDER</option>
				<option value="rdate">JGLOBAL_MOST_RECENT_FIRST</option>
				<option value="date">JGLOBAL_OLDEST_FIRST</option>
				<option value="alpha">JGLOBAL_TITLE_ALPHABETICAL</option>
				<option value="ralpha">JGLOBAL_TITLE_REVERSE_ALPHABETICAL</option>
				<option value="author">JGLOBAL_AUTHOR_ALPHABETICAL</option>
				<option value="rauthor">JGLOBAL_AUTHOR_REVERSE_ALPHABETICAL</option>
				<option value="hits">JGLOBAL_MOST_HITS</option>
				<option value="rhits">JGLOBAL_LEAST_HITS</option>
				<option value="random">JGLOBAL_RANDOM_ORDER</option>
				<option value="order">JGLOBAL_ORDERING</option>
				<option value="vote" requires="vote">JGLOBAL_VOTES_DESC</option>
				<option value="rvote" requires="vote">JGLOBAL_VOTES_ASC</option>
				<option value="rank" requires="vote">JGLOBAL_RATINGS_DESC</option>
				<option value="rrank" requires="vote">JGLOBAL_RATINGS_ASC</option>
			</field>
			<field name="order_date" type="list"
				description="JGLOBAL_ORDERING_DATE_DESC"
				label="JGLOBAL_ORDERING_DATE_LABEL"
				useglobal="true">
				<option value="created">JGLOBAL_CREATED</option>
				<option value="modified">JGLOBAL_MODIFIED</option>
				<option value="published">JPUBLISHED</option>
			</field>
		</fieldset>
	</fields>
</metadata>

Важные параметры

На мой взгляд самыми важными настройками являются:

layout_type - отвечает за тип вывода макета и как следствие за подключение скрптов, так к пример layout_type = blog подключит к вам bs2 и стандартный jquery

article_layout - этот параметр отвечает за то какой макет использоваться уже в самом материале. Благодаря этому параметру, если в настройках материала не выбран макет, то будет использоваться указанных в этом xml в данном случае это макет article

display_num - отвечает за количество выводимых материалов в списке категорий

Если у вас изначально был выбран макет default, то значение параметра display_num могло остаться у вас в сессии

show_subcategory_content - отвечать за вывод материалов из под категорий, а точнее за из скольких уровней под категорий выводить материала на странице категории.

orderby_pri - отвечает за сортировку категорий, если использовать этот параметр то материалы будут сначала сортироваться по данному параметру.

orderby_sec – отвечает за сортировку материалов по указному параметру.

order_date – используется в том случае если в orderby_sec выбрано «самые новые первыми» или «Старые первыми»

Скачать примеры

В XML для переопределения article нет смысла т.к макет можно выбрать в стандартном xml или в самом материале. Да и лишних скриптов он не подключает.