<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
        <channel>
        <title>верстка / Tag search / Русский клуб Joomla</title>
        <link>http://joomclub.net/en/rss/tag/верстка/</link>
        <description><![CDATA[Сайт посвящен Joomla во всех ее проявлениях, мы рассказываем о шаблонах, расширениях, компонентах, плагинах и модулях]]></description>
        <language>ru</language>
        <managingEditor>tena2000@mail.ru</managingEditor>
        <webMaster>tena2000@mail.ru</webMaster>
        <generator>Alto CMS v.1.1.13</generator>
                    <item>
                <title>Косячим: Меню</title>
                <guid isPermaLink="true">http://joomclub.net/en/t/82/</guid>
                <link>http://joomclub.net/en/blog/design/82.html</link>
                <author>idm.box@gmail.com</author>
                <description><![CDATA[<p>Добрый день. Кратко расскажу об основной ошибке при создании главного меню на сайте.</p><p>На JoomlaForum есть раздел «Мой сайт на Joomla», который я периодически просматриваю. Глядя на работы новичков я, честно говоря, прихожу в ужас. Большинство работ сделаны по советам «10 грубейших ошибок при создании сайта», только советы были интерпритированы с точностью наоборот. Хочу немного обобщить всяческие советы непосредственно для меню.</p><p><strong>Основная ошибка: слишком много пунктов меню</strong></p><p>Зачем больше 5 пунктов в главном меню? У вас всегда есть футер. И тот человек, который ищет что-то конкретное, всегда докрутит до футера и кликнет, на интересующий его пункт меню. Вот пример отвратительного меню:</p> <pre class="prettyprint"><code>Главная&nbsp;| О&nbsp;нас&nbsp;| Почему мы&nbsp;| Цены&nbsp;| Услуги&nbsp;| Скидки&nbsp;| Акции&nbsp;| Предложение посредникам&nbsp;| Вакансии&nbsp;| Наша техника&nbsp;| Задайте нам вопрос&nbsp;| &lt;a name=&quot;cut&quot;&gt;&lt;/a&gt;  Фотогалерея&nbsp;| Контакты</code></pre> <p>Допустим, фирма занимается бурением скважин. Значит они продают «услуги по бурению» и их клиенты скорее всего хотят себе на даче пробурить ту саму скважину. Что интересует такого клиента? Ответ очевиден — цена качественного решения. Тоесть «Во сколько мне это все обойдется?»<br>
Берем пункты меню которые ему (в данной статье я буду этим самым покупателем) будут полезны на этом сайте:</p><ol><li><strong>Главная</strong> — не нужно, но этот пункт меню дефолтный. Оставляем.</li> <li><strong>О нас</strong> — не нужно, я готов обратится и к Тургению Стуслову, если тот делает качественно и недорого. Удаляем.</li> <li><strong>Почему мы</strong> — да действительно? Если мне делать нечего, то почитаю на досуге. Удаляем</li> <li><strong>Цены</strong> — о именно это я и искал. Оставляем.</li> <li><strong>Услуги</strong> — хм, а в «ценах» разве не написаны услуги? Удаляем.</li> <li><strong>Скидки</strong> — интересно, наверно сильно завышают цены, потому и скидки делают, да они всем скидки делают, сначала накрутят сверху 10% — потом на них скидки и делают… Удаляем.</li> <li><strong>Акции</strong> — наверно пробури 5 скважин и получи в подарок подержанное колесо от 131 ЗИЛа или флэшку на 512 Mb. Удаляем.</li> <li><strong>Предложение посредникам</strong> — я вообще-то просто скважину хочу, но если сосед захочет, я ему рекомендую эту фирму, то может мне копеечка перепадет. Удаляем.</li> <li><strong>Вакансии</strong> — не, у меня есть работа, а если и надо найти работу, то ищу на сайтах соответствующей тематики. Удаляем.</li> <li><strong>Наша техника</strong> — наверно фотки старых зилков… может взглянуть? Удаляем.</li> <li><strong>Задайте нам вопрос</strong> — а я думал в пункте «контакты» написаны все ваши контактные данные, там и можно задать вопрос. Удаляем.</li> <li><strong>Фотогалерея</strong> — надеюсь там хоть показано, как вы бурите и реализованные объекты — посмотрим. Оставляем.</li> <li><strong>Контакты</strong> — о да. Цены у вас на сайте наверно неактуальные, дай-ка вам напишу вопросец. Звонить не буду.</li></ol><p>Вот так вас жестоко, я, обычный потребитель, ваше меню, пардон, кастрировал.</p> <pre class="prettyprint"><code>Главная&nbsp;| Цены&nbsp;| Фотогалерея&nbsp;| Контактная информация</code></pre> <p>Так… тут меня должны засыпать вопросами, а как-же скидки, вакансии и т.д.… ща… секундочку:</p><ul><li><strong>О нас</strong> — это можно написать внизу на главной странице, только в 2-х предложениях. Вообще про данную контору я бы так написал «Бурим скважины», и написал бы это в шапке сайта под логотипом. А полноценный текст (если клиент сильно настаивает) спрятал бы за пунктом меню в футере.</li> <li><strong>Почему мы</strong> — просто абсолютно ненужный текст, который никто не читает, кроме вебмастеров, которые хотят создать такой-же пункт меню.</li> <li><strong>Услуги</strong> — просто запомните навсегда: «Услуги и цены», лучше просто «Цены».</li> <li><strong>Скидки</strong> — скидки пишите в прайс-листе. А еще лучше сделайте форму в прайсе, где человек может поставить галочку напротив скидки (например — я пенсионер) — и пусть ему в прайсе цены меняются.</li> <li><strong>Акции</strong> — акции Эппла после выхода 5-го айфона упали. Но суть не в этом. Акции — это банеры, яркие сочные банеры, но никак не пункт меню. Акции должны быть либо временными: с 1 января по 15 января в подарок фильтр очиски воды. 30-31 февраля скважины бесплатно! Если акция постоянная — то это уже спецпредложение или просто навязываемая услуга.</li> <li><strong>Предложение посредникам</strong> — переносите в футер.</li> <li><strong>Вакансии</strong> — футер.</li> <li><strong>Наша техника</strong> — это в фотогалерее должно быть.</li> <li><strong>Задайте нам вопрос</strong> — это должно быть в разделе «Контактная информация» или же небольшой онлайн чат, который всегда надоедает, на каждой странице и периодически выскакивает с заголовком «Могу ли я вам чем-то помочь?» — Мне например охота туда писать только одно «Да вы уже ...».</li> <li><strong>Контакты</strong> — не, контакты мы никуда не переносим, но теперь, когда у нас появилось свободное место в меню, мы там можем написать «Контактная информация». В моем понимании «Контакты» — это такие усы у троллейбуса и трамвая, которыми он протирает провода, ну или штырьки у розетки. Вообще я сам пишу часто эти контакты, но советую забыть эту привычку.</li></ul><p>Идеальное решение, для любителей все-таки запихать всё, абсолютно всё, в главное меню — сделайте его выпадающим и логическим. Как пример хорошего логического меню — я всегда давал официальный сайт браузера оперы. У них кстати в 2009 было 8 пунктов, 2010 — 7, 2011 — всего 6 пунктов.</p><hr><p>Дополнено после комментариев <a href="http://joomclub.net/profile/al-teen/" class="ls-user">al-teen</a>  </p>.<p>Старайтесь писать короткие названия пунктам меню. Например пункт «Предложение посредникам» можно сократить до: «Посредникам». Люди поймут. Или «Сохранить в черновиках» можно сократить до: «В черновики». «Авторизация» — «Вход», «Каталог продукции» — «Каталог» и т.д. </p>]]></description>
                <pubDate>Mon, 29 Oct 2012 12:12:07 +0400</pubDate>
                            </item>
                    <item>
                <title>Ликбез по созданию и расширению меню</title>
                <guid isPermaLink="true">http://joomclub.net/en/t/62/</guid>
                <link>http://joomclub.net/en/blog/verstka/62.html</link>
                <author>al-teen@inbox.ru</author>
                <description><![CDATA[<p><b><span style="color: blue;">1) Создание меню. </span></b></p>

<ul><li>Создаем меню через менеджер меню в панели администратора ( Крестик «Создать», заполняем все поля, «Сохранить»).</li><li>Выбираем в списке  созданное меню, жмем «Создать», из списка выбираем нужный пункт, пишем заголовок, псевдоним, сохраняем.</li><li>Создаем еще несколько пунктов.</li></ul><p>В панели администратора заходим в менеджер модулей ( Расширения =&gt; модули ), над списком модулей находим кнопку «Новый» ( Крестик ). На открывшейся странице находим пункт «Меню», жмем на него. 
Слева в верхней строчке пишем название модуля, оно же будет заголовком, выводящимся на странице. 
Варианты включить и выключить для отображения заголовка ( показать или скрыть его на странице сайта ), включить или отключить модуль. 
Выбыраем из списка позицию шаблона, в которой будет выведено меню (например «top» или «left»).
Ниже: выбор группы пользователей, для которых показывать меню, дополнительные стили для меню.</p>

<p>Справа видим выпадающий список со всеми меню, выбираем по <a name="cut" rel="nofollow"></a> названию созданное нами ранее. Ниже предоставляются варианты отображения, выбираем «Список». Можете поэкспериментировать с остальными вариантами. Разница в способах представления на уровне HTML разметки. Но чаще используется именно Список.Далее идут пункты «Начальный уровень» и «Последний уровень», «Всегда показывать подпункты» — это настройки уровней вложенности для пунктов меню, о них информация ниже. Расположение нового окна — параметры JavaScript — расположение всплывающего окна, например, </p>

<pre class="prettyprint"><code>top=50,left=50,width=200,height=300</code></pre>
<p>В дополнительных параметрах возможно указать интервал между пунктами горизонтального меню (показывать или нет), кэширование ( рекомендуется когда меню уже создано и отредактировано — кэширование позволяет оптимизировать работу сайта ).
Ниже располагаются настройки:
</p>

<ul><li>ID тега меню — CSS-идентификатор (id), назначенный для тега UL верхнего уровня (необязательный параметр).</li><li>CSS-суффикс класса меню (здесь можно задать особый класс CSS для визуальной организации меню).</li><li>CSS-суффикс класса модуля (здесь задается особый класс CSS для визуальной организации модуля (содержимого меню))</li></ul><p>Через них возможно привязывать к меню собственные CSS стили. Например указав для суффикса класса меню </p>

<p>Код:</p>

<pre class="prettyprint"><code>_main</code></pre>
. В коде нашего меню увидим 
<p>Код:</p>

<pre class="prettyprint"><code>&lt;ul class=&quot;menu_main&quot;&gt;</code></pre>
Вместо 
<p>Код:</p>

<pre class="prettyprint"><code>&lt;ul class=&quot;menu&quot;&gt;</code></pre>
<p>Максимальный уровень вложенности меню по умолчанию стоит 10. То есть меню может содержать максимум 10 уровней вложенных подменю. Уровни больше этого числа будут игнорироваться. Если не показываются подпункты некоторого уровня, то увеличьте это число.

В других настройках возможно настроить:
</p>

<ul><li>Показывать значки меню — включает отображение значков меню. Формат значков зависит от конкретного шаблона.</li><li>Расположение значков меню — задает расположение значков меню справа или слева.</li><li>Ссылка на значок меню — значок сам по себе является ссылкой.</li><li>Развернутое меню — задает, должен ли пункт меню всегда быть развернут, даже если нажатие происходит по другим меню.
Активировать родительский пункт - активная ссылка присваивается родительскому пункту при переходе по ссылке в дочернюю категорию.</li><li>Постоянная подсветка активных пунктов — выделение активной ссылки.</li><li>Изображение отступа — задает значки, которые будут отображаться в дереве меню уровнем ниже. Можно задать использование значков из шаблона, значки Joomla по умолчанию, не использовать вовсе или задать каждому уровню вложенности своё изображение.</li><li>Изображение отступа 1-6 — задает индивидуальный значок каждому уровню иерархии.</li><li>Разделитель — задает разделитель пунктов вертикального меню.</li><li>Разделитель по концам — задает разделитель пунктов в горизонтальных меню.</li></ul><p>Жмем «Сохранить». На странице сайта появляется соданное нами меню. Таким образом мы создали простое меню, без всяких эффектов.</p>

<p><b><span style="color: blue;">2) Расширяем меню.</span></b></p>

<p>Расширить свойства меню можно путем CSS, JavaScript и PHP. Существует множество готовых решений, но редко они соответсвуют требованиям конкретного сайта без необходимости их «допиливать». Эти решения мы не будем разбирать в данной теме, а разложим варианты, наиболее часто задаваемых вопросов в разделе.</p>

<p><span style="color: green;">Простое горизонтальное меню.</span></p>



<pre class="prettyprint"><code>&nbsp;ul.menu {
	padding:&lt;span&gt;0&lt;/span&gt;;
	margin:&lt;span&gt;0&lt;/span&gt;;
&nbsp;
}
 ul.menu li {
	float: left; /* выравниваем ссылки по горизонтали */
	list-style-type: none; /* убираем маркеры списка*/	
	padding-left:&lt;span&gt;10px&lt;/span&gt;; /* внутренний отступ слева */	
	padding-right:&lt;span&gt;10px&lt;/span&gt;; /* внутренний отступ справа */	
	padding-bottom:&lt;span&gt;0px&lt;/span&gt;; /* внутренний отступ снизу */	
	padding-top:&lt;span&gt;0px&lt;/span&gt;; /* внутренний отступ сверху */	
	background-image: url(../images/menu_sep&lt;span&gt;.gif&lt;/span&gt;) no-repeat right top; /* разделитель */	
	position:relative; /* позиционируем в блоке родителя */	
}
&nbsp;
 ul.menu a {
	display: block; /* делаем кликабельной всю кнопку */	
	height: 22px; /* высота кнопки*/	
	padding: 0 10px; /* внутренний отступ справа и слева */	
	overflow: hidden; /* запрещаем обтекание */	
	color: #7a7a7a; /* цвет ссылки */	
	font-family:Grotic; /* название шрифта */	
	font-style:bold; /* жирность шрифта */	
	font-size: 11px; /* размер шрифта */	
	text-decoration:none; /* убираем подчеркивание ссылки */	
	padding-top:&lt;span&gt;3px&lt;/span&gt;; /* внутренний отступ сверху */
}
 ul.menu li.active a, ul.menu li a:hover {
	color:#E8A03D; /* цвет ссылки при наведении и активной ссылки */	
}</code></pre>
<p>Так же можно вместо разделителя задать цвет кнопки, или присвоить ей графику.</p><p>Аналогично</p><pre class="prettyprint"><code>background-image: url(../images/menu_sep.gif) no-repeat right top;</code></pre><p>возможно присвоить к  </p><pre class="prettyprint"><code>ul.menu a </code></pre><p>и
</p><pre class="prettyprint"><code>ul.menu li.active a, ul.menu li a:hover</code></pre><p>Простое вертикальное меню делается аналогично, за исключением отсутствия в </p><pre class="prettyprint"><code>ul.menu li элемента float: left;</code></pre><p>Можем несколько расширить наше простое меню в визуальном плане при 
помощи средств стандартной для Joomla библиотеки mootools. Например 
добавить анимацию при наведении на ссылку 
</p><p>В поле между тэгами</p><pre class="prettyprint"><code>&lt;head&gt; &lt;/head&gt;</code></pre><p>Вашего шаблона, добавляем </p><pre class="prettyprint"><code>&lt;script type=&quot;text/javascript&quot;&gt;
window.addEvent('domready', function(){
 &nbsp; &nbsp;var el = $$('#my_menu li'),
	 color = el.getStyle('backgroundColor', '#333');
 &nbsp; &nbsp; &nbsp; $$('#my_menu li').set('margin', 0).addEvents({
	 &nbsp; &nbsp; mouseenter: function(){
		 this.morph({'margin-left': 5,'background-color': '#676768'});},
		 mouseleave: function(){
		 this.morph({margin: 0,backgroundColor: color});
	}});
});
&lt;/script&gt;</code></pre><p>В строках </p><pre class="prettyprint"><code>'background-color': '#...'</code></pre><p>Редактируем цвет кнопок.
</p><p>Ниже в шаблоне, позицию для модуля меню оборачиваем блоком </p><pre class="prettyprint"><code>&lt;div class=&quot;my_menu&quot;&gt;&lt;/div&gt;</code></pre><p>То есть выглядеть это будет примерно следующим образом
</p><pre class="prettyprint"><code>&lt;div id=&quot;my_menu&quot;&gt;
&nbsp; &nbsp; &lt;jdoc:include type=&quot;modules&quot; name=&quot;leftmenu&quot; /&gt;
&lt;/div&gt;</code></pre><p>За работоспособносьт примера ручаться не стану по ряду причин, но в 
общих чертах думаю понятно, каким образом возможно назначить различные 
эффекты для нашего меню.</p><p><span style="color: green;">Создание выпадающего меню средствами CSS.</span></p><ul><li>В менемжере меню создаем новые пункты меню и присваиваем им родительский пункт.</li><li>В настройках модуля меню Начальный уровень — 0, Последний уровень — 2 или более.</li></ul><p>На странице сайта должны появиться дочерние пункты меню рядом с родительским.</p><p>В файл template.css шаблона добавляем строчки:</p><pre class="prettyprint"><code>ul.menu {
	position: absolute;
	top: 78px;
	left: 172px;
	list-style-type: none;
	padding:&lt;span&gt;0&lt;/span&gt;;
	margin:&lt;span&gt;0&lt;/span&gt;;
&nbsp;
}
 ul.menu li {
	float: left;
	list-style-type: none;
	padding-left:&lt;span&gt;10px&lt;/span&gt;;
	padding-right:&lt;span&gt;10px&lt;/span&gt;;
	padding-bottom:&lt;span&gt;0px&lt;/span&gt;;
	padding-top:&lt;span&gt;0px&lt;/span&gt;;
	background-image: url(../images/menu_sep&lt;span&gt;.gif&lt;/span&gt;);
	background-position: right top;
	background-repeat: no-repeat;
	position:relative;
}
&nbsp;
 ul.menu a {
	display: block;
	height: 22px;
	padding: 0 10px;
	overflow: hidden;
	color: #7a7a7a;
	font-family:Grotic;
	font-style:bold;
	font-size: 11px;
	text-transform: uppercase;
	text-decoration:none;
	padding-top:&lt;span&gt;3px&lt;/span&gt;;
}
ul.menu li.active a, ul.menu li a:hover {
	color:#E8A03D;
}
ul.menu li a, ul.menu li.active ul li a &nbsp;{
	color:#7a7a7a;
}
&nbsp;
ul.menu li ul {
 &nbsp; &nbsp;display:none;
 &nbsp; &nbsp;position:absolute;
 &nbsp; &nbsp;top:&lt;span&gt;2em&lt;/span&gt;;
 &nbsp; &nbsp;left:&lt;span&gt;0&lt;/span&gt;;
 &nbsp; &nbsp;padding:&lt;span&gt;0px&lt;/span&gt; 0px 7px;
 &nbsp; &nbsp;margin:&lt;span&gt;0px&lt;/span&gt; 0px 7px;
 &nbsp; &nbsp;background-color:white;
 &nbsp; &nbsp;opacity:&lt;span&gt;0&lt;/span&gt;.&lt;span&gt;75&lt;/span&gt;;
}
ul.menu li:hover ul {
 &nbsp; &nbsp;display:block;
}
ul.menu li:hover ul li a{
 &nbsp; &nbsp;height:auto;
}</code></pre><p>Вертикальное это меню или горизонтальное, сторону, в которой отображаются подпункты при наведении можно настроить в каскаде </p><pre class="prettyprint"><code>ul.menu li ul</code></pre><p>оперируя свойствами</p><pre class="prettyprint"><code>&nbsp; top:2em;
&nbsp; &nbsp;left:0;
&nbsp; &nbsp;padding:0px 0px 7px;
&nbsp; &nbsp;margin:0px 0px 7px;</code></pre><p>Из минусов данного метода можно выделить сложности с IE6 — не воспринимает :hover, лечится костылями на JS,
Сложности
с восприятием 4го и более уровней. То есть подобным методом корректно 
можно обработать вложениея лишь до 3го уровня включительно. Если нужно 
обработать больше вложений, рекомендую использовать средства JS.</p><p><span style="color: green;">Выпадающее меню на JS+CSS.</span></p><p>Создаем отдельный файл menu.js, в него заносим код:</p><pre class="prettyprint"><code>window.addEvent('domready', function() {
&nbsp;
var Element = $$('.moduletable_shop ul.menu li.parent').set({
 &nbsp; &nbsp;'events': {
 &nbsp; &nbsp; &nbsp; &nbsp;'mouseover': function(){ this.addClass('hilite') },
 &nbsp; &nbsp; &nbsp; &nbsp;'mouseleave': function(){ this.removeClass('hilite') }
 &nbsp; &nbsp;}
});
});</code></pre><p>В CSS добавляем:</p><pre class="prettyprint"><code>ul.menu li ul{
ul.menu li ul{
 &nbsp;display:block;
&nbsp;
 &nbsp;z-index:&lt;span&gt;-2&lt;/span&gt;; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /*Здесь прячем подпункты на нижние слои*/
 &nbsp;position:absolute;
 &nbsp;margin-left: 220px; &nbsp;/*Отступ справа = ширина родительского пункта меню*/
 &nbsp;margin-top: -93px; &nbsp; /*Отступ снизу = высота родительского пункта меню*/
&nbsp;
 }
 ul.menu li.hilite ul{
 &nbsp; z-index:&lt;span&gt;100&lt;/span&gt;; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*Вот здесь класс hilite наш - выводим меню в верхние слои*/
 }</code></pre><p>Оперируя свойствами</p><pre class="prettyprint"><code>margin-left: 220px;
&nbsp;margin-top: -93px;</code></pre><p>добиваемся четкого отображения раскрывающихся категорий.</p><p><b><span style="color: blue;">3) Устраняем недочеты.</span></b></p><p>В стандартном mod_mainmenu существуют несколько досадных недоработок.  
Если
на сайте используется несколько модулей меню на основе стандартного 
mod_mainmenu – мы получаем ошибку валидации – для каждого активного 
пункта меню UL LI создается id=«current» (в случае создания связанных 
меню, многоуровневых либо просто дублирование модуля)
Лечится просто
– в файле templates/шаблон/html/mod_mainmenu/default.php (что это такое
и что делать если такого файла нет – объяснять не буду, читаем 
документацию по шаблонизации движка) находим строку примерно 71</p><pre class="prettyprint"><code>$node-&gt;addAttribute('id', 'current');</code></pre><p>и заменяем на</p><pre class="prettyprint"><code>$node-&gt;addAttribute('id', 'current'.$id);</code></pre><p>Теперь у нас к каждому current добавляется идентификатор itemid.
</p><p>Для лучшей поисковой оптимизации к каждой ссылке на сайте рекомендуется 
добавлять атрибут title=&quot;&quot; с описанием. В стандартном модуле его нет, но
лечится весьма не сложно.</p><p>Копируем файл modules/mod_mainmenu/tmpl/default.php в папку шаблона, т.е. он должен размещаться по адресу
templates/название_шаблона/html/mod_mainmenu/default.php</p><p>Открываем файл, находим строку</p><pre class="prettyprint"><code>if (isset($path) &amp;amp;&amp;amp; $node-&gt;attributes('id') == $path[0]) {</code></pre><p>и перед ней вставляем код</p><pre class="prettyprint"><code>&nbsp; &nbsp;if ($node-&gt;name() == 'a') {
 &nbsp; &nbsp; &nbsp; &nbsp;$children = $node-&gt;children();
 &nbsp; &nbsp;foreach ($node-&gt;children() as $child)
 &nbsp; &nbsp;{
 &nbsp; &nbsp; &nbsp;if ($child-&gt;name() == 'span') {
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$node-&gt;addAttribute('title', $child-&gt;_data);
 &nbsp; &nbsp; &nbsp;}
 &nbsp; &nbsp;}
 &nbsp; &nbsp;}</code></pre><p>Теперь у нас ссылки меню получают атрибут title=&quot;&quot;.</p>]]></description>
                <pubDate>Tue, 09 Oct 2012 02:50:14 +0400</pubDate>
                            </item>
                    <item>
                <title>Ликбез по CSS спрайтам</title>
                <guid isPermaLink="true">http://joomclub.net/en/t/61/</guid>
                <link>http://joomclub.net/en/blog/verstka/61.html</link>
                <author>al-teen@inbox.ru</author>
                <description><![CDATA[<p>CSS спрайты — это вывод отдельных элементов единого изображения на веб — странице. То есть одна большая картинка, либо несколько разных, но объединенных в один файл рядом друг с другом. Зачастую подобным образом группируют множество различных иконок. Разработчики называют подобный файл <b>мастер сеткой</b>. В качестве примера возьмем одну картинку, из которой нам нужно вывести в разных частях страницы различные ее элементы. Как вариант, порезать ее на куски и определять каждую часть отдельно, 1 элемент — 1 отдельный файл. Впрочем еще несколько лет назад именно так все и делали. Простейший вариант по своей сути. Но данный метод имеет один существенный недостаток, а именно — количество HTTP запросов, которые отсылает сервер браузеру. Одна картинка — это один запрос. Чем их больше, тем дольше будет загружаться страница. Посему CSS спрайты в первую очередь служат для сокращения количества этих самых запросов.Выше на картинке вполне четко показан принцип работы CSS спрайтов если представлять <a name="cut" rel="nofollow"></a> выделенную в кружок область в качестве области с изображением на нашей странице.Работает данная технология следующим образом. В нашей странице имеется блок:</p>

<p>Код</p>

<pre class="prettyprint"><code>&lt;a href=&quot;http://december.com/html/4/element/div.html&quot;&gt;&lt;span&gt;&lt;div&lt;/span&gt;&lt;/a&gt; id=&quot;mushroom&quot;&gt;&lt;span&gt;&lt;/div&gt;&lt;/span&gt;</code></pre>

В нем нам нужно вывести грибок с картинки выше. Открываем всю картинку в редакторе, например Paint.NET, там находим в самом низу шкалу координат. Средством выделения узнаем точный размер области с грибом, у меня получилось 18x18 пикселов. Записываем размеры. Затем опять же при помощи выделения узнаем расстояние до верха картинки от края мастер сетки, аналогично расстояние от левого края. У меня это 40px и 0px. Затем создаем в CSS описание класса mushroom такого типа:

<p>Код</p>

<pre class="prettyprint"><code>#mushroom{
 &nbsp; &nbsp;background: url(sprite&lt;span&gt;.gif&lt;/span&gt;) no-repeat -36px 0px;
 &nbsp; &nbsp;height: 18px;
 &nbsp; &nbsp;width: 18px;
}</code></pre>

Разберем пример. Свойством background выводим грибок в блок &lt;div id=«mushroom»&gt;&lt;/div&gt; в качестве фонового изображения, no-repeat запрещаем повторяться картинке, -36px и 0px это наши координаты X,Y, именно при помощи них мы и перемещаем по мастер сетке фокус к нужному нам элементу. height:18px и width:18px регулируем размер видимой на странице области. Как видно ничего сложного в этом всем нет, все гениальное — просто.

Для <b>потребленцев</b> людей выбирающих американский образ жизни, порекомендую <a rel="nofollow" href="http://ru.spritegen.website-performance.org/" target="_blank">он — лайн генератор CSS спрайтов
</a>

Для нормальных людей — читаем ниже.

<b>1.Простые спрайты.</b>

Для объединения изображений в спрайты рекомендую использовать не сложные графические редакторы. Такие как Paint.NET для Windows, Gnome Paint для Linux. Создаем в редакторе новый файл, на нем, посредством наложения слоев, размещаем нужные изображения для нашего спрайта. Ничего сложного. Таким образом создается мастер сетка.
После ее создания, рекомендую выполнить оптимизацию общего изображения, для уменьшения веса. Об оптимизации графики смотрим <a href="http://joomlaforum.ru/index.php/topic,169308.0.html" target="_blank" rel="nofollow">тут</a>.

Далее, как показано выше, создаем CSS классы для каждого нужного элемента и выводим их на страницу.

Примечание: для повторяющихся изображений, например для repeat-x (y) подобного рода мастер сетка не подойдет. Для горизонтального повторения (repeat-x) создается вертикальная тонкая полоска, в которой все элементы распологаются один над другим. Причем справа или слева пробелов быть не должно, иначе фон будет повторяться и с ними тоже. Аналогично и для вертикальной мастер сетки, только изображение соответственно будет горизонтальным и элементы располаться будут один рядом с другим по горизонтали.

<b>2.Спрайты через псевдо — элементы.</b>

Главное преимущество использования псевдо-элементов заключается в том, что дизайнеры смогут подрезать спрайты. В общем, ничего нового, так как многие сайты уже используют для этого дополнительные теги. Например, Yahoo! Search использует для этих целей пустой тег s, а Facebook — тег i. Но можно ведь создавать компактные CSS спрайты и без пустых вставок между изображениями в спрайте.

<img src="http://rghost.ru/12593771/private/73cf0b5d64e22891c5e13e37aa0b3243/image.png">
Два следующих изображения — второй элемент спрайта — сгенерированы с использованием каждой техники соответственно.

<ul><li>Метод Николаса Галагера, cтилизация псевдо-элемента фоновым изображением:</li></ul><p>Код</p>

<pre class="prettyprint"><code>#first:before { 
	content: &quot;&quot;; 
	float: left; 
	width: 15px; 
	height: 15px; 
	margin: 4px 5px 0 0; 
	background: url(sprite&lt;span&gt;.png&lt;/span&gt;) -15px 0; 
}</code></pre>

<ul><li>Метод нового url()/clip, использование свойства content для вставки спрайта, подрезанного с помощью свойства clip:</li></ul><p>Код</p>

<pre class="prettyprint"><code>#second { 
	position: relative; 
	padding-left: 20px; 
	background-image: expression(this.runtimeStyle.backgroundImage=&quot;none&quot;,this.innerHTML = '&lt;img alt=&quot;&quot; src=&quot;sprite.png&quot;&gt;'+this.innerHTML); 
} 
&nbsp;
#second:before, 
#second img { 
	content: url(sprite&lt;span&gt;.png&lt;/span&gt;); 
	position: absolute; 
	top: 3px; 
	clip: rect(0 30px 15px 15px); 
	left: -15px;
	_left: -35px;
}</code></pre>

Как это работает.

Вместо того, чтобы стилизовать псевдо-элемент как фон, мы используем его для вставки изображения (через content)
С помощью clip мы подрезаем его, чтобы отображалась только та часть, которая нужна. Это значит, что не нужно вставлять пустые теги в изображения, чтобы не отображать другие части изображения (обычно используется как фоновое изображение больших элементов)
Мы смещаем значения clip с помощью свойства left и/или top.

Если не подрезать спрайты, изображения в нем должны выровняться по левому или правому краю, чтобы соответствовать контексту RTL/LTR (background-position: | [vertical value]). Проблемы также возникают при создании спрайтов, где изображения следуют одно за другим (так как другие изображения тоже смогут отображаться). Если же подрезать спрайт, то изображения просто налезут друг на дружку.

Пример:

<img src="http://rghost.ru/12594081/private/66997346e7f8e8e7b7191b30375fb468/image.png">
Преимущества этой техники по сравнению с другими:

<ul><li>Отображение при печати. В отличие от фоновых изображений, при печати они распечатаются в документе.</li><li>Доступность. В отличие от фоновых изображений, они будут отображать в режиме high contrast или при контрастных CSS стилях.</li><li>Работает в IE. Метод подходит для Internet Explorer 6 и 7.</li></ul>Отметьте также, что может быть использована схема data URI для игнорирования HTTP запросов. IE 6/7 не поддерживает данную схему, но можно воспользоваться MHTML для IE6/7.

<b>3.Стилизация ссылок с помощью псевдо-элементов.</b>

Николас Галагер показал много интересных фишек, касающихся псевдо-элементов. Единственное, чтобы я добавил, так это пример использования :after для стилизации ссылок типа «читать дальше», например:

<p>Код</p>

<pre class="prettyprint"><code>.more:after { 
	white-space:nowrap; 
	content: &quot; &lt;span&gt;\00BB; /* » */
} 
.more { 
	white-space:nowrap; 
	background-image: expression(this.runtimeStyle.backgroundImage=&quot;&lt;/span&gt;none&quot;,this.innerHTML = this.innerHTML+' »'); 
}</code></pre>

Слово о доступности.

Имейте в виду, что генерируемый контент читается скрин-ридерами, и так как нет механизмов, которые предоставляли бы соответствующий текст изображению через свойство content, мы должны быть уверены, что эти изображения используются только для стилизации, так как пользователи со скрин-ридерами не смогут достучаться до той информации.

Оригиналы материалов:
<a rel="nofollow" href="http://coding.smashingmagazine.com/2011/03/19/styling-elements-with-glyphs-sprites-and-pseudo-elements/" target="_blank">http://coding.smashingmagazine.com/2011/03/19/styling-elements-with-glyphs-sprites-and-pseudo-elements/</a>]]></description>
                <pubDate>Tue, 09 Oct 2012 02:12:25 +0400</pubDate>
                            </item>
                    <item>
                <title>jdoc:include - метод отображения контента на странице.</title>
                <guid isPermaLink="true">http://joomclub.net/en/t/22/</guid>
                <link>http://joomclub.net/en/blog/templates/22.html</link>
                <author>al-teen@inbox.ru</author>
                <description><![CDATA[<p>В статье <a href="http://joomclub.net/blog/verstka/16.html" rel="nofollow">Создание шаблонов для Joomla</a> мы поверхностно коснулись темы методов вывода контента в теле шаблона. Давайте теперь подробно разберем что это и с чем его едят. Итак, объявления метода <span><span>jdoc</span> присутствуют<span>  в каждом</span> шаблоне <span>Joomla</span><span>и выводят в тело шаблона (то бишь на страницу сайта) ту или иную информацию. В целом объявление метода выглядит следующим образом</span></span><br>
<pre class="prettyprint"><code>&lt;jdoc:include type=&quot;component&quot; /&gt;</code></pre></p>
<p>Данная строчка выводит на сайте информацию из компонентов, например статьи из com_content. Тип элементов вывода указывается в атрибуте.</p>
<p>    <strong>1. type — типы элементов вывода.</strong></p>
<ul><li><em>component</em> — как писал выше, выводит основное содержание страницы. Может вызываться только один раз в шаблоне.</li><li><em>head</em> — объявляется так же один раз после открывающего тэга &lt;head&gt;. Служит для вывода стилей, скриптов, &lt;title&gt; и метаданных текущей страницы.</li><li><em>message </em><em>-</em> выводит системные сообщения. Объявляется один раз в теле документа (body).</li><li><em>installation </em> — ничего не выводит и <a name="cut" rel="nofollow"></a> представляет собой «инструкцию» для установки.</li><li><em>module — </em>выводит на странице единичный модуль. Количество объявлений не ограничено.</li><li><em>modules </em> — в отличии от предыдущего типа, позволяет выводить в своей позиции не единичое число модулей.</li></ul><p>Для первых четырех указанных типов достаточно лишь указать их на странице. В случае с типом модуля задача немного усложняется. Для того, чтобы вывести на странице модуль нам нужно сперва создать для него <strong>модульную позицию</strong> с уникальным идентификатором (название позиции модуля). Это делается при помощи атрибута name=«имя позиции» и обязательным добавлением строки:<pre class="prettyprint"><code>&lt;position&gt;название позиции&lt;/position&gt;</code></pre>в файл templateDetails.xml. Описывая название позиции в templateDetails.xml мы обозначаем ее в системе и видим в менеджере модулей. Имена позиций могут быть произвольными, хотя name=«user3» позиция, по-умолчанию используется для отображения верхнего меню.</p>
<p>    <strong>2. style — описание стиля вывода (mod chrome).</strong></p>
<p>От указанного стиля зависит внешний вид и структура оболочки модуля. Выглядит как<pre class="prettyprint"><code>:&lt;jdoc:include type=&quot;modules&quot; name=&quot;user1&quot; style=&quot;xhtml&quot; /&gt;</code></pre>По-умолчанию заложено несколько стилей вывода модулей:</p>
<ul><li><em>xhtml -</em> выводит модуль в блоке с заголовком<pre class="prettyprint"><code>function modChrome_xhtml($module, &amp;$params, &amp;$attribs)<br />{<br />&nbsp;&nbsp; &nbsp;if (!empty ($module-&gt;content)) : ?&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;div class=&quot;moduletable&lt;?php echo htmlspecialchars($params-&gt;get('moduleclass_sfx')); ?&gt;&quot;&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;?php if ($module-&gt;showtitle != 0) : ?&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;h3&gt;&lt;?php echo $module-&gt;title; ?&gt;&lt;/h3&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;?php endif; ?&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;?php echo $module-&gt;content; ?&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />&nbsp;&nbsp; &nbsp;&lt;?php endif;<br />}</code></pre></li><li><em>table — </em>выводит модуль в верстке табличной структуры<br>
<pre class="prettyprint"><code>function modChrome_table($module, &amp;$params, &amp;$attribs)<br />{ ?&gt;<br />&nbsp;&nbsp; &nbsp;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;moduletable&lt;?php echo htmlspecialchars($params-&gt;get('moduleclass_sfx')); ?&gt;&quot;&gt;<br />&nbsp;&nbsp; &nbsp;&lt;?php if ($module-&gt;showtitle != 0) : ?&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;tr&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;th&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;?php echo $module-&gt;title; ?&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/th&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/tr&gt;<br />&nbsp;&nbsp; &nbsp;&lt;?php endif; ?&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;tr&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;td&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;?php echo $module-&gt;content; ?&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/td&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/tr&gt;<br />&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;/table&gt;<br />&nbsp;&nbsp; &nbsp;&lt;?php<br />}</code></pre></li><li><em>horz — </em>выводит содержимое модуля в ячейке таблицы, горизонтально<pre class="prettyprint"><code>function modChrome_horz($module, &amp;$params, &amp;$attribs)<br />{ ?&gt;<br />&nbsp;&nbsp;&nbsp; &lt;table cellspacing=&quot;1&quot; cellpadding=&quot;0&quot; width=&quot;100%&quot;&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;tr&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;td&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;?php modChrome_table($module, $params, $attribs); ?&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/td&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/tr&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/table&gt;<br />&nbsp;&nbsp;&nbsp; &lt;?php<br />}</code></pre></li><li><em>rounded</em> — выводит модуль в нескольких вложенных блоках для сложного стилевого оформления в виде графических границ (напр. закругленных углов)<pre class="prettyprint"><code>function modChrome_rounded($module, &amp;$params, &amp;$attribs)<br />{ ?&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;div class=&quot;module&lt;?php echo htmlspecialchars($params-&gt;get('moduleclass_sfx')); ?&gt;&quot;&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;div&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;div&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;div&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;?php if ($module-&gt;showtitle != 0) : ?&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;h3&gt;&lt;?php echo $module-&gt;title; ?&gt;&lt;/h3&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;?php endif; ?&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;?php echo $module-&gt;content; ?&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />&nbsp;&nbsp;&nbsp; &lt;?php<br />}</code></pre></li><li><em>outline</em> — добавляет к блоку модуля предустановленные стили css<pre class="prettyprint"><code>function modChrome_outline($module, &amp;$params, &amp;$attribs)<br />{<br />&nbsp;&nbsp;&nbsp; static $css=false;<br />&nbsp;&nbsp;&nbsp; if (!$css)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $css=true;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; jimport('joomla.environment.browser');<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $doc = JFactory::getDocument();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $browser = JBrowser::getInstance();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $doc-&gt;addStyleDeclaration(&quot;.mod-preview-info { padding: 2px 4px 2px 4px; border: 1px solid black; position: absolute; background-color: white; color: red;}&quot;);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $doc-&gt;addStyleDeclaration(&quot;.mod-preview-wrapper { background-color:#eee; border: 1px dotted black; color:#700;}&quot;);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ($browser-&gt;getBrowser()=='msie')<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if ($browser-&gt;getMajor() &lt;= 7) {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $doc-&gt;addStyleDeclaration(&quot;.mod-preview-info {filter: alpha(opacity=80);}&quot;);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $doc-&gt;addStyleDeclaration(&quot;.mod-preview-wrapper {filter: alpha(opacity=50);}&quot;);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $doc-&gt;addStyleDeclaration(&quot;.mod-preview-info {-ms-filter: alpha(opacity=80);}&quot;);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $doc-&gt;addStyleDeclaration(&quot;.mod-preview-wrapper {-ms-filter: alpha(opacity=50);}&quot;);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $doc-&gt;addStyleDeclaration(&quot;.mod-preview-info {opacity: 0.8;}&quot;);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $doc-&gt;addStyleDeclaration(&quot;.mod-preview-wrapper {opacity: 0.5;}&quot;);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; ?&gt;<br />&nbsp;&nbsp;&nbsp; &lt;div class=&quot;mod-preview&quot;&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;div class=&quot;mod-preview-info&quot;&gt;&lt;?php echo $module-&gt;position.&quot;[&quot;.$module-&gt;style.&quot;]&quot;; ?&gt;&lt;/div&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;div class=&quot;mod-preview-wrapper&quot;&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;?php echo $module-&gt;content; ?&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />&nbsp;&nbsp;&nbsp; &lt;?php<br />}</code></pre></li><li><em>none</em> — аналогично не указанному вообще style. Выводит модуль без оформления и заголовка<pre class="prettyprint"><code>function modChrome_none($module, &amp;$params, &amp;$attribs)<br />{<br />&nbsp;&nbsp;&nbsp; echo $module-&gt;content;<br />}</code></pre></li></ul><p>Все предустановленные стили располагаются в файле templates/system/html/modules.php. Но мы не ограничены использованием только предоставленных вариантов, а вполне можем создавать свои собственные.</p>
<p>    <strong>3. Создание пользовательского mode chrome.</strong></p>
<p><strong><br>
</strong>Итак, предоставленные по умолчанию типы представления модулей не удовлетворяют текущих требований. Нужно добавить свой собственный стиль оформления. В качестве примера выберем достаточно часто повторяющуюся ситуацию. По заданию нужно вместо &lt;h3&gt; поместить заголовок модуля в тэг &lt;span&gt;, который является семантически нейтральным. Так же требуется поместить контентблок модуля в отдельный &lt;div&gt;. Для создания собственного стиля вывода модуля, воспользуемся стандартными средствами. В большинстве шаблонов  Joomla существет папка html/ (templates/имя шаблона/html/), используется для так называемой шаблонизации. То есть, если скопировать в эту папку шаблон модуля,  то вместо шаблона из директории modules/my_module/tmpl/default  будет выводиться файл из templates/имя шаблона/html/my_modules/default. Аналогично шаблонизируются и компоненты. Удобно и практично. В папке html/ Вашего шаблона создадим файл modules.php. Если такой папки в шаблоне нет, то создадим ее. В файл запишем<pre class="prettyprint"><code>&lt;?php<br />function modChrome_modbox($module, &amp;$params, &amp;$attribs) // Вызываем функцию<br />{<br />&nbsp;&nbsp;&nbsp; if (!empty ($module-&gt;content)) : /* Проверяем наличие в поиции включенного модуля */?&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div class=&quot;moduletable&lt;?php echo htmlspecialchars($params-&gt;get('moduleclass_sfx')); /* выводим суффикс css класса модуля */ ?&gt;&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;?php if ($module-&gt;showtitle != 0) : /* проверяем включен ли заголовок модуля */ ?&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;span class=&quot;title&quot;&gt;&lt;?php echo $module-&gt;title; /* Выводим заголовок */ ?&gt;&lt;/span&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;?php endif; ?&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div class=&quot;modcontent&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;?php echo $module-&gt;content; /* Выводим содержимое модуля */ ?&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />&nbsp;&nbsp;&nbsp; &lt;?php endif;<br />}<br />?&gt;</code></pre>Готово. Теперь нужно только указать его в качестве стиля вывода.</p>
<p><pre class="prettyprint"><code>&lt;jdoc:include type=&quot;modules&quot; name=&quot;user1&quot; style=&quot;modbox&quot;/&gt;</code></pre>Назначаем в нашу позицию модуль и смотрим результат.</p>]]></description>
                <pubDate>Fri, 14 Sep 2012 00:46:26 +0400</pubDate>
                            </item>
                    <item>
                <title>Создание шаблонов для Joomla</title>
                <guid isPermaLink="true">http://joomclub.net/en/t/16/</guid>
                <link>http://joomclub.net/en/blog/templates/16.html</link>
                <author>al-teen@inbox.ru</author>
                <description><![CDATA[<p>Шаблоны практически всех CMS чем то похожи. Это обычные HTML шаблоны, интегрированные с системой. Чаще всего интеграция достигается путем вставки в нужные блоки программного кода, объявляющего те или иные элементы вывода: модулей, сайдбаров, материалов и т.д. Различия лишь в программировании, на уровне HTML никаких отличий нет и быть не может. Joomla в данном случае является классическим примером. Для того, чтобы создать в блоке шаблона позицию для модуля, нам требуется всего лишь вписать в него строчку <pre class="prettyprint"><code>&lt;jdoc:include type=&quot;modules&quot; name=&quot;mymodule&quot; /&gt;</code></pre><br>
Где <span><span>&lt;jdoc:include</span> <span>/&gt;</span> </span> — метод объявления вывода элемента на страницу.</p>
<p>type=«modules» — указания типа выводимого элемента.</p>
<p>name=«mymodule» — название модульной позиции. </p>
<p>Минимальная информация, необходимая для создания позиции в шаблоне. Используется для вывода на странице модулей, например: меню навигации, формы авторизации, «хлебных крошек» и т.д. Так же можно указывать title=&quot;&quot; для обозначения подсказки, style=&quot;&quot; для <a name="cut" rel="nofollow"></a> обозначения стиля вывода модуля. В случае отсутствия style модуль будет выводиться без заголовка. Обозначения стилей подробнее разберем в следующих статьях. А пока, в качестве наглядного примера создадим простой шаблон для Joomla.</p>
<p>Для этого необхомо создать пустую папку c произвольным названием, пусть будет mytemplate, в ней создадим папку css. Далее создадим файлы templateDetails.xml, index.php и пустой файл index.html для защиты от несанкционированного просмотра содержимого папки. В css/ файл стилей template.css. </p>
<p>Содержимое templateDetails.xml</p>
<p><pre class="prettyprint"><code>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;<br />&lt;!DOCTYPE install PUBLIC &quot;-//Joomla! 2.5//DTD template 1.0//EN&quot; &quot;http://www.joomla.org/xml/dtd/1.6/template-install.dtd&quot;&gt; &lt;!-- Общая для всех xml шапка, определяющая тип документа и его кодировку --&gt;<br />&lt;extension version=&quot;2.5&quot; type=&quot;template&quot; client=&quot;site&quot;&gt; &lt;!-- Указание инсталлятору Joomla о версии и типе устанавливаемого расширения --&gt;<br />&nbsp;&nbsp;&nbsp; &lt;name&gt;mytemplate&lt;/name&gt; &lt;!-- Имя шаблона в списке менеджера шаблонов --&gt;<br /><br />&nbsp;&nbsp;&nbsp; &lt;files&gt; &lt;!-- Контейнер для списка файлов шаблона. --&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;folder&gt;css&lt;/folder&gt; &lt;!-- Указание папок --&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;filename&gt;index.html&lt;/filename&gt; &lt;!-- Указание файлов --&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;filename&gt;index.php&lt;/filename&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/files&gt; &lt;!-- Обязательно требуется для стандартного установщика Joomla. Важно! Если информация о папках или файлах, указанная в данном блоке не соответствуют действительности, например не верно указано имя, или файл отсутствует, то получим ошибку установки --&gt;<br /><br />&nbsp;&nbsp;&nbsp; &lt;positions&gt; &lt;!-- Контейнер для списка модульных позиций шаблона --&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;position&gt;debug&lt;/position&gt; &lt;!-- Указание имени модульной позиции --&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;position&gt;header&lt;/position&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;position&gt;menu&lt;/position&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;position&gt;footer&lt;/position&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/positions&gt;<br />&lt;/extension&gt;</code></pre><br>
В файле index.php</p>
<p><pre class="prettyprint"><code>&lt;?php<br />// Защита от прямого обращения к сценарию.<br />defined('_JEXEC') or die;<br />?&gt;<br />&lt;!DOCTYPE html&gt;<br />&lt;html lang=&quot;&lt;?php echo $this-&gt;language; ?&gt;&quot;&gt;<br />&lt;meta charset=&quot;utf-8&quot;&gt;<br />&lt;head&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;jdoc:include type=&quot;head&quot; /&gt; // Требуется для вывода информации &lt;title&gt;&lt;/title&gt;, meta стилей и скриптов расширений.<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link rel=&quot;stylesheet&quot; href=&quot;&lt;?php echo $this-&gt;baseurl ?&gt;/templates/system/css/system.css&quot;&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link rel=&quot;stylesheet&quot; href=&quot;&lt;?php echo $this-&gt;baseurl ?&gt;/templates/system/css/general.css&quot;&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Подключаем системные стили<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link rel=&quot;stylesheet&quot; href=&quot;&lt;?php echo $this-&gt;baseurl ?&gt;/templates/&lt;?php echo $this-&gt;template; ?&gt;/css/template.css&quot;&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // Подключаем файл стиля шаблона. Важно! Путь к файлу необходимо указывать в точности, как написано здесь, то есть абсолютный путь. <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // В противном случае чревато неправильным отображением шаблона на внутренних страницах. То же касается и подключения js файлов.<br />&lt;/head&gt;<br />&nbsp; &lt;body&gt;<br />&nbsp;&nbsp;&nbsp; &lt;div id=&quot;page&quot;&gt; <br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;header&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;jdoc:include type=&quot;modules&quot; name=&quot;header&quot; /&gt; // Модульная позиция header<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/header&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;nav&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;jdoc:include type=&quot;modules&quot; name=&quot;menu&quot; style=&quot;xhtml&quot; /&gt; // Модульная позиция menu<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/nav&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;section&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;jdoc:include type=&quot;message&quot; /&gt; // Позиция вывода системных сообщений<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;jdoc:include type=&quot;component&quot; /&gt; // Вывод информации компонентов<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/section&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;footer&gt;<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;jdoc:include type=&quot;modules&quot; name=&quot;footer&quot; /&gt; // Модульная позиция footer<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &lt;/footer&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />&nbsp;&nbsp;&nbsp; &lt;jdoc:include type=&quot;modules&quot; name=&quot;debug&quot; /&gt; // Вывод отладочной информации<br />&nbsp; &lt;/body&gt;<br />&lt;/html&gt;</code></pre><br>
template.css</p>
<p><pre class="prettyprint"><code>body{margin:0;padding:0;}<br />header,nav,section,footer{display:block;padding:5px;}<br />#page{border:1px #000 solid;width:960px;margin:0 auto;}<br />header{height:100px;}<br />nav{width:200px;float:left;margin:10px 0;}<br />section{width:730px;float:right;margin:10px 0;}<br />footer{height:100px;}</code></pre></p>
<p>Пример, наглядно демонстрирующий простоту работы с шаблонами Joomla. Алгоритм несложный, взять готовый шаблон HTML и вывести в нужных местах нужные элементы. Конечно же, в более сложных шаблонах приходится использовать условия отображения, скрипты, пользоваться другими возможностями Joomla, а так же вести разработку на различных шаблонных фрэймворках (Gantry, T3 и т.д.). Но если Вам не требуется ничего сверхординарного и сложного, то вполне можно обойтись даже описанным выше простейшим функционалом. </p>
<p> </p>]]></description>
                <pubDate>Wed, 12 Sep 2012 14:21:01 +0400</pubDate>
                            </item>
            </channel>
    </rss>
