Может ли разумный человек,
учитывая опыт прошедших веков,
питать хоть малейшую надежду на светлое будущее человечества? Может, если свяжется с мной!

898
2009 25 октября

Модуль AJAX поиска по сайту (Joomla 1.5, Jquery, com_content only)

jquery1 По мотивам инструкции сообразил на быструю руку бета версию реализации поиска на сайте без ручного ковыряния файлов - ajaxSearchJquery_beta 1.0 Рабочая версия в демонстрации (верхний правый угол сайта)
Установка: 1 - качаем архив с расширениями тут http://www.pbelkov.net/ajaxsearch.zip 2 - распаковываем на локальном диске 3 - устанавливаем компонент com_ajaxsearch 4 - устанавливаем и публикуем на нужной позиции модуль mod_ajaxsearch Внимательно: 0 - поиск только по стандартным материалам (заголовок, вступительный текст) 1 - это пока бета рабочей версии, потому на свой страх и риск 2 - функционал основан на Jquery (под мутулз пусть энтузиасты переписывают), если библиотека ранее подключается на сайте - можно выключить в настройках модуля 3 - результат поиска выводится в диве id="suggestions" (сейчас заложен в шаблоне модуля), можно переместить в любое другое место сайта и поправить CSS (files\ajaxsearch.css в модуле). P.S. на вопросы " как перенести див и\или настроить позиционирование" стараюсь не отвечать 4 - если результатов несколько - строкам присваиваются классы odd\even, оформление базово заложено в CSS модуля 5 - поиск производится по заголовку и вступительному тексту материала, кому надо - ковыряем файл components\com_ajaxsearch\ajaxsearch.php 6 - подсветка с классом highlight для искомого запроса работает только если найдено соответствие в заголовке, по умолчанию модуль выводит только его 7 - поиск стартует с вводом первого символа P.S. фишка для энтузиастов, кому было нужно разобрались бы и по инструкции, потому на вопросы 1-го класса по возможности не отвечаю Тема на joomlaforum
1134
2009 23 октября

Структура шаблона com_content

Структура шаблона com_content Рассмотрим по очереди все заложенные возможности шаблона стандартных материалов компонента com_content. Для затравки можно взять содержимое папки \templates\beez\html\com_content\ и положить в свой шаблон. Там конечно не все идеально, но данный стандартный шаблон построен на div и имеет все вьюшки контента. Кому есть чем дополнить (либо поправить если где ошибаюсь) - милости просим
Содержимое данного каталога представлено в виде 4-х папок с соответствующими шаблонами представлений
  • article
    • default.php - - собственно оконечная страница материала (view=article), отрабатывает плагины на событие afterDisplayContent
    • form.php - стандартная форма добавления материала с фронтенда
  • category
    • blog.php - материалы категории в формате блога как бы общий каркас (view=category&layout=blog): описание категории, разбиение на колонки, ссылки типа "еще", постраничная навигация
    • blog_item.php - связан напрямую с blog.php - показывает непосредственно элемент статьи формата блог: заголовок, даты, автор, вступительный текст, подробнее, отрабатывает плагины на событие afterDisplayContent
    • blog_links.php - связан напрямую с blog.php, показывает ссылки типа "еще", по умолчанию в формате UL LI
    • default.php - список материалов категории (view=category): заголовок категории, описание, вывод материалов категории в виде таблицы
    • default_items.php - связан напрямую с default.php - формирует таблицу материалов (номер, заголовок, дата, хиты), фильтры над таблицей, постраничную навигацию
  • frontpage - шаблон только главной страницы, что работает по умолчанию
    • default.php - аналог category\blog.php
    • default_item.php - аналог category\blog_item.php
    • default_links.php - аналог category\blog_links.php
  • section
    • blog.php - материалы раздела в формате блога (view=section&layout=blog), аналогичен category\blog.php
    • blog_item.php - аналогичен category\blog_item.php, отображает каждый элемент блога раздела
    • blog_links.php - аналогичен category\blog_links.php, показывает ссылки типа "еще" в блоге раздела
    • default.php - стандартный шаблон раздела (view=section), показывает заголовок категории, описание, кол-во элементов. По нажатию на заголовок категории дальнейшая страница обрабатывается шаблоном category\default.php
Если каталог \templates\ВашШаблон\html\com_content\ отсутствует в шаблоне, значит отрабатывают оригинальные темплейты компонента, находится в components\com_content\views\НужноеПредставление\tmpl (там есть еще и archive, используется редко такой вывод, потому не рассматривал, разобраться по аналогии несложно) И последний на этот раз аспект (вопрос уж очень часто поднимается на форуме). Как нам добавить дополнительные данные к стандартному контенту (к примеру количество хитов в формат блога категории либо любое другое)? Для этого нам необходимо работать с моделью, каталог com_content\models\, в нем 4 нужных нам файла (архив не рассматриваю) - article.php - category.php - frontpage.php - section.php Посмотрев на названия и прочитав пару абзацев выше понятно кто за что отвечает. Потому в данном примере мы заходим в category.php и находим там глобальный SQL запрос (в каждой моделе он находится в функции function _buildQuery) и добавляем в выборку нужный элемент.
1
SELECT ......, a.hits AS articlehits, .....
Все, после этого отправляемся в шаблон category\blog_item.php и в нужном месте дописываем
1
<?php echo $this->item->articlehits; ?>
P.S. прошу прощения, но на вопросы 1-го класса как работать с sql запросами, показать элемент языкового файла, расстановка кавычек и подобные не отвечаю Тема на joomlaforum
1155
2009 19 октября

Создаем AJAX поиск по сайту (jquery)

Итак, общие аспекты создания поиска по сайту с применением AJAX. В чем суть - при вводе\удалении каждого символа в поле поиска обращаемся к БД и показываем совпадения Рабочий пример http://www.rcoi.net/beta/ (справа вверху поле поиска) Автор идеи Marco Kuiper На деталях останавливаться не буду, кому интересно без проблем разберутся
1 - подключаем Jquery (я беру с гугля версию 1.3.2)
1
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
2 - в HEAD шаблона подключаем следующий JS
1
23
45
67
89
1011
1213
14
function lookup(inputString) {
        if(inputString.length == 0) {                $('#suggestions').fadeOut(); 
        } else {                        $.post("index.php?option=com_pbajax&task=ajaxsearch&no_html=1", {queryString: ""+inputString+""}, function(data) { 
                        $('#suggestions').fadeIn();                        $('#suggestions').html(data); 
                });        }
         $("input").blur(function(){
                $('#suggestions').fadeOut();         });
}
В моем случае я использую собственный компонент com_pbajax с набором определенных тасков, один из которых ajaxsearch и обрабатывает результаты поиска его код ниже 3 - модифицируем шаблон модуля поиска, в моем случае он выглядит так (готовый хтмл на выходе)
1
23
45
<form action="index.php"  method="post" class="search" name="zform">
        <input name="searchword" id="inputString" onkeyup="lookup(this.value);" maxlength="20" class="inputbox" type="text" size="20" value="поиск по сайту"  onblur="if(this.value=='') this.value='поиск по сайту';" onfocus="if(this.value=='поиск по сайту') this.value='';" />        <input type="hidden" name="option" value="com_search" />
        <input type="hidden" name="task"   value="search" /></form>
То есть по событию onkeyup вызываем нашу функцию lookup и отдаем ей на обработку введенное значение 4 - и собственно код обработчика (в моем случае это компонент com_pbajax и в нем кейс ajaxsearch
1
23
45
67
89
1011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
4041
4243
4445
4647
4849
5051
5253
5455
5657
5859
6061
6263
6465
6667
case 'ajaxsearch';
                $queryString    = JRequest::getVar( 'queryString', 1, 'post' ); 
                $db     = JFactory::getDBO();                $user   =& JFactory::getUser();
                 require_once(JPATH_SITE.DS.'components'.DS.'com_content'.DS.'helpers'.DS.'route.php');
                require_once(JPATH_SITE.DS.'libraries/phputf8/utf8.php'); 
                $nullDate       = $db->getNullDate();                $date           =& JFactory::getDate();
                $now            = $date->toMySQL(); 
                $query = 'SELECT a.*, '                . ' CASE WHEN CHAR_LENGTH(a.alias) THEN CONCAT_WS(":", a.id, a.alias) ELSE a.id END as slug,'
                . ' CASE WHEN CHAR_LENGTH(cc.alias) THEN CONCAT_WS(":", cc.id, cc.alias) ELSE cc.id END as catslug'                . ' FROM #__content AS a'
                . ' INNER JOIN #__categories AS cc ON cc.id = a.catid'                . ' INNER JOIN #__sections AS s ON s.id = a.sectionid'
                . ' WHERE a.title LIKE "%'.$queryString.'%" OR a.introtext LIKE "%'.$queryString.'%" '                . ' AND a.state = 1'
                . ' AND cc.published = 1'                . ' AND s.published = 1'
                . ' AND a.access <= '.(int) $user->get( 'aid' )                . ' AND cc.access <= '.(int) $user->get( 'aid' )
                . ' AND s.access <= '.(int) $user->get( 'aid' )                . ' AND ( a.publish_up = '.$db->Quote($nullDate).' OR a.publish_up <= '.$db->Quote($now).' )'
                . ' AND ( a.publish_down = '.$db->Quote($nullDate).' OR a.publish_down >= '.$db->Quote($now).' )'                . ' ORDER BY title  LIMIT 10'
                ; 
                if ($queryString != '') {                        $db->setQuery($query);
                        $rows = $db->loadObjectList();                        $html = '<div id="searchresults">';
                $n = count($rows);                $i = '1';
                        if ($n) {                                $html .= '<ul class="searchresultsli">';
                                foreach ( $rows as $row )                                        {
                                                $link = ContentHelperRoute::getArticleRoute($row->slug, $row->catslug, $row->sectionid); 
                                                $class = '';                                                if ($i%'2'=='0') {
                                                        $class = 'odd';                                                } else {
                                                    $class = 'even';                                                }
                                                 $html .= '<li class="'.$class.'">';
                                                $html .= $i.' - ';                                                $title = str_replace($queryString, '<span class="highlight">'.$queryString.'</span>', utf8_strtolower($row->title));
                                                $html .= '<a href="'.$link.'">'.$title.'</a>';                                                $html .= '</li>';
                                                $i++;                                        }
                                $html .= '</ul>';                        } else {
                        $html .= 'По Вашему запросу ничего не найдено';                        }
                        $html .= '</div>';                } else {}
                 echo $html;
         break;
Чуть пошагово: 1 - подключили роутер контента и utf8.php для отработки utf8_strtolower (можете этого и не делать) 2 - запрос вытягивает заголовок материала и вступительный текст на предмет поиска совпадений с ключевым запросом $queryString 3 - регуляркой обрабатываем заголовок и подсвечиваем искомое слово в выдаче (в моем случае результат выдается только заголовком, потому если совпадение с $queryString найдено в introtext то в заголовке выдачи подсвечивать нечего) 4 - добавляем классы odd\even для чередования строк (можно и на квери делать, но почему то стало лень) 5 - в нужное место вешаем див для показа результатов поиска, у меня он висит в индексе шаблона
1
<div id="suggestions"></div>
И оформляем CSS стили положение блока и собственно результатов поиска
1
23
45
67
89
/* AJAX search */
#suggestions { position: absolute; width:350px; display:none; z-index: 100; right: 20px; top: 75px;}#suggestions {border: 1px solid #ABD2DE; background-color: #DEEFF4; padding: 10px;text-align: left; color: #1F579A; font-size: 12px;}
#suggestions a, #suggestions li {color: #1F579A; font-size: 12px; text-decoration: none;}#suggestions a:hover {text-decoration: underline;}
ul.searchresultsli, ul.searchresultsli li {margin: 0px; padding: 0px; background-image: none; list-style: none;}ul.searchresultsli li {padding: 7px 5px 7px 3px;}
ul.searchresultsli li.odd {background-color: #F4F1E1;}a.highlight {color: #FE9500 !important; font-weight: bold;}
После этого получаем красивый поиск и пищу для дальнейших модификаций Мопед не мой, автор идеи Marco Kuiper, за что ему отдельное спасибо Готового модуля делать не буду, разобраться думаю не составляем проблем Тема на Joomlaforum P.S. обращаю внимание, что парсер моего блога перевирает одинарные кавычки, потому просто копи\паст работать не будет
420
2009 20 сентября

Постраничная навигация для Datso 1.8.1 (page navigation)

По просьбе пользователя ce300man набросал добавление постраничной навигации в страницы галереи ( Популярные | Лучшие | Новые | Комментарии) Немного теории. Статья официальной вики Using JPagination in your component Работать будем с файлом components\com_datsogallery\sub_viewspecial.php

644
2009 24 августа

Плагин невизуального редактора СodEditor (beta)

Представляю Вашему вниманию мелкую поделку для собственных нужд - невизуальный редактор для Joomla 1.5, по типу Home-site и других редакторов, СodEditor версия 1.0.2

Что умеет:

1 - вставлять заданные теги (минимально необходимый набор) 2 - обрамлять выделенный текст выбранным тегом (выделили текст, нажали В - текст обрамился тегами) 3 - поддерживаемые теги: B, I, U, S, P, BR, UL LI, OL LI, A, IMG, H1-H6

В планах на будущее (никаких сроков реализации не обещаю и обещать не буду)

1 - добавить подсветку синтаксиса HTML 2 - добавить нумерацию строк (под вопросом) 3 - добавить функционал плагина для JCE advlink для добавления ссылки на определенный набор элементов сайта, материалы, ссылки в меню (очень нескоро)

Кратко для интересующихся

1 - для добавления собственного тега открываем файл plugins\editors\codeditor.php, находим строки 153-173 и по аналогии добавляем свой тег (не забываем положить картинку в каталог plugins\editors\codeditor\ico) Плагин невизуального редактора СodEditor (beta)
Скачать с Яндекса
Тема на joomlaforum

changelog

Исправлена ошибка работы сторонних кнопок редактора под областью ввода (подробнее, изображения и прочие), спасибо ShadowXak
1149
2009 16 августа

Модифицируем стандартный mod_latestnews

Зачастую нам требуется вывод простейший новостей, но стандартный модуль mod_latestnews версии движка 1.5 умеет показывать лишь заголовок. Начинаются поиски мега модулей для решения элементарной задачи. В этом примере расскажу как с помощью легкой модификации стандартного модуля вывести следующие данные: заголовок материала, дата создания, вступительный текст, ссылку "читать далее"
Итак мы будем работать с двумя файлами modules\mod_latestnews\helper.php - подготовка данных (дальше хелпер) modules\mod_latestnews\tmpl\default.php (дальше шаблон) Открываем хелпер, находим строку
1
$lists[$i]->text = htmlspecialchars ( $row->title );
под ней сразу добавляем
1
2
$lists[$i]->created = JHTML::_('date', $row->created, JText::_('DATE_FORMAT_LC2'));
$lists[$i]->introtext = strip_tags ( $row->introtext );

Комментарии:

1 - конструкция DATE_FORMAT_LC2 используется чтобы привести выводимую дату к приличному виду, смотрим файл language\ru-RU\ru-RU.ini самое начало (можем изменить формат) и читаем справку по функции date 2 - функция strip_tags используется, чтобы избавить вступительный текст от всего HTML мусора, что хорош в режиме блога, но очень мешает в обычном модуле Дальше переходим к шаблону, сразу приведу общий текст, сравнивайте с оригинальным и делайте выводы
1
23
45
67
89
1011
12
<ul class="latestnews<?php echo $params->get ('moduleclass_sfx'); ?>">
<?php foreach ($list as $item) :  ?>        <li class="latestnews<?php echo $params->get ('moduleclass_sfx'); ?>">
                <span class="date"><?php echo $item->created; ?></span>                <a href="<?php echo $item->link; ?>" class="latestnews<?php echo $params->get ('moduleclass_sfx'); ?>">
                <?php echo $item->text; ?></a>                <br />
                <?php echo $item->introtext; ?>                <a href="<?php echo $item->link; ?>" title="read more">read more</a>
        </li><?php endforeach; ?>
</ul>

Комментарии:

1 - если мы не используем на сайте многоязычность, то фразу "read more" можно написать по русски но не забыть сохранить файл в кодироке UTF-8 2 - справка по используемым элементам массива
1
23
45
echo $params->get ('moduleclass_sfx'); // CSS суффикс, заданный в настройках модуля
echo $item->text;  // заголовок материалаecho $item->introtext; // текст вступительный материала
echo $item->created;  // дата создания материалаecho $item->link; // ссылка на полный текст материала

Пара примеров модификаций

Интро текст у нас в 500 слов а мы хотим выводить первые 200 символов, но аккуратно обрезать последнее слово а не посередине, потому функция примитивная, первый параметр - вхождение собственно текста ($row->introtext в цикле нашего хелпера), второй - количество символов, по которому будем обрезать)
1
23
4
function NewsCrop ($text, $str_len ) {
        $textCrop = strip_tags (mb_substr ($text, '0', $str_len) );        return $textCrop;
}
Пример применения примерно такой
1
2
$str_len = '200';
$lists[$i]->introtext = NewsCrop ($row->introtext , $str_len);
Дальнейшие возможные модификации безграничны (элементарные знания php + sql необходимы), но для большинства хотелок этого должно быть достаточно, временные затраты 5 минут и все готово. На пиво принимаю в профиле :) Кросспост на joomlaforum
930
2009 27 июля

Модуль обратный отсчет для Joomla 1.5

mod_countdown Версия модуля 2.1.0 для Joomla 1.5 Список изменений: * Полностью переписан код * Создан простенький шаблонизатор * Стили модуля вынесены в отдельный CSS * P.S. модуль не умеет работать с високосными годами Проверял с различными вариациями даты, локально все показывал корректно (кол-во дней, часов, минут до события как в статике, так и в посекундном JS скрипте). Тестировал в мозилла, опера, ИЕ 6-7 Скачать здесь или на joomlaforum Версия модуля 2.5.1 для Joomla 2.5
665
2009 24 июля

Плагин ArtFormsplugin для компонента ArtForms

Тестируйте первую версию плагина ArtFormsplugin для Joomla 1.5 Пробовал у себя пошагово:
  1. создал формочку из пары полей
  2. уставил плагин
  3. в материал вписал {ArtForms formid=1}

В тексте появилась форма и кнопка "send", по нажатию ничего не происходит (точнее перебрасывает меня на страницу index.php?option=com_ArtForms&formid=1&Itemid=1 пустую, видимо потому что не создал обработчик формы - лень разбираться в самом компоненте было)

Все опции работы плагина также не проверял (бо их там много а рабочей формы для тестирования под рукой нет).

Скачать плагин
Обсуждение на Joomlaforum
1877
2009 24 июля

Модуль последних сообщений с SMF 2.0

Забираем, версия модуля mod_latestsmf 1.2.0 для Joomla 1.5 и SMF 2.0 RC1.2

Обязательные требования:

1 - после установки модуля указать в настройках абсолютный путь к файлам форума DOCUMENT_ROOT/smf_path/ (слеш на конце обязателен) 2 - наличие на сервере библиотеки mb_substr 3 - форум должен быть установлен с указанием кодировки UTF-8 (на 1251 не тестировал, ничего не могу сказать)

5192
2009 13 июля

Модуль вывода товаров для VirtueMart

vm_logo2 Представляю Вашему внимания достаточно универсальный модуль для VirtueMart, версия mod_VirtueMart_universal 1.2.1 (beta version) для Joomla 1.5. Почему этот модуль, а не родной от разработчика VirtueMart Soeren - родной модуль на 6 товаров генерит от 40 запросов в БД, мой же только один SQL запрос

394
2009 20 июня

Нереспект хостингу mastak.ru

hosting Имелся сайт с средней посещаемостью 1-3 тыщи уников в день на 1.0.12 на совершенно обычном виртуальном хостинге. Каюсь, оптимизации сайта практически не было, но и особой нагрузки он не давал. Недавно в связи с введением нового функционала посещаемость подскочила до 10-20 000 уников в сутки. Хостер моментально отключил за превышение всех допустимых нагрузок и попросил переехать на вдс. Услуги данного хостера меня давно не очень устраивали, но чтобы не срывать работу сайта взяли на месяц его ВДС, 4000 рублей\месяц. Через пару дней снова отрубили таки за нагрузку. Поддержка после определенной ругани с моей стороны сказала, что развели апач и MySQL по разным серверам и попросили еще 4000 рублей за второй сервер (!!!).
Железную составляющую называть отказываются, но судя по их сайту mastak.ru/content/newprices/#3 самый дорогой тариф имеет в своем распоряжении проц аж на 900 mhz (сам не верю что технологии уже настолько продвинулись) и памяти выделяют целых 512 Mb от щедрот своих, дисковое пространство при этом 6 гигов. Стоит все это добро 3000 рублей в месяц (+ 1000 за установку). При этом сайт отзывается только лишь на 70% запросов, периодически уходя в глубокий даун. Сейчас готовим переезд на moinet.ru (совершенно другой уровень железа, денег и обслуживания), оформляем тариф VPS.PRO ( кому интересно могут ознакомиться с параметрами http://moinet.ru/vps) - в два раза дешевле и железо в 3 раза лучше. Ну а Мастак пусть и дальше остается на допотопном железе за бешеные деньги и с полнейшей наглостью на лице. Вотс..
602
2009 15 июня

ЕГЭ изнутри (глазами админа)

Злободневная тема, много топиков и на хабре (вот и вот)

Совершенно не собираюсь останавливаться на законности эксперимента, содержании КИМ (контрольно измерительных материалов) и прочем. Постараюсь сконцентрироваться непосредственно на технологическом аспекте подготовки и проведения экзамена. Почему мне можно верить – опыт работы 2004-2007 в РЦОИ Московской области (системное администрирование, сбор данных, координация с разработчиками и регионами, проведение обучений, консультации и прочее). Все это время мы работали по технологии КРОК (см. ниже), в 2009 года технология изменилась в приказном порядке на ЦТ. Итак, по порядку

Ссылка на кросспост хабра

1106
2009 11 июня

Верстка под магазин VamSHOP

Довелось давеча верстать шаблон под такой скрипт как VamSHOP Хаять особо не буду, но собственные замечания зафиксирую

845
2009 04 июня

Различные условия в шаблонах Joomla 1.5

logo Основные моменты по созданию наиболее часто употребляемых условий в шаблонах для Joomla 1.5. Для простоты примеров будем работать с стандартным com_content
Для начала рассмотрим получение необходимых параметров, которые в Joomla 1.0 было достаточно объявить как глобальные
1
23
$Itemid = JRequest::getInt( 'Itemid', 1, 'get' ); //получем текущий ItemID, если не определен – то по умолчанию будет 1
$option = JRequest::getVar('option', null); // получаем название текущего компонента, в нашем случае будет com_content либо NULL$view = JRequest::getVar('view', null); // получаем значение текущей вьюшки

Примечания:

- Что такое $Itemid можно прочитать в статье http://joomlaforum.ru/index.php/topic,12816.0.html, по умолчанию значение для главной страницы равно 1, смотреть в модуле mainmenu первую ссылку, либо ссылку, опубликованную в состоянии «по умолчанию»

Какие могут быть значения для $view (Еще может добавляться параметр layout):

Section – если тип ссылки «содержимое раздела» category – если тип ссылки «содержимое категории» либо переходим из раздела «содержимое раздела», либо тип «блог-содержимое категории» article – режим просмотра полного текста материала Как узнать необходимый параметр – отлючить стандартный (или сторонний) SEF и смотреть на URL (до полного просветления). Теперь дальше рассмотрим различные ситуации, что могут понадобиться. Для начала HTML код по умолчанию (обычный трехколоночный макет без шапки и подвала, в центре место для pathway и вывода компонентов, слева\справа по позиции модулей)
1
23
<div class="leftcolumn"><jdoc:include type="modules" name="left" style="xhtml" /></div>
<div class="centercolumn"><jdoc:include type="modules" name="breadcrumb" /><jdoc:include type="component" /></div><div class="rightcolumn"><jdoc:include type="modules" name="right" style="xhtml" /></div>

1 – если на позиции RIGHT не опубликовано ни одного модуля, то не показываем определенный блок сайта

1
23
45
67
<div class="leftcolumn"><jdoc:include type="modules" name="left" style="xhtml" /></div>
<?php if($this->countModules('right')) : ?><div class="centercolumn"><jdoc:include type="modules" name="breadcrumb" /><jdoc:include type="component" /></div>
<div class="rightcolumn"><jdoc:include type="modules" name="right" style="xhtml" /></div><?php else: ?>
<div class="centercolumn_full"><jdoc:include type="modules" name="breadcrumb" /><jdoc:include type="component" /></div><?php endif; ?>
Сакральный смысл – если на позиции нет ни одного модуля, мы не покажем вообще rightcolumn, но чтобы центральная колонка раздвинулась на всю оставшуюся ширину, мы к ней применяем отдельный класс centercolumn_full

2 – мы не хотим показывать pathway (хлебные крошки) на главной странице, а только на внутренних

1
23
45
67
<div class="leftcolumn"><jdoc:include type="modules" name="left" style="xhtml" /></div>
<div class=”centercolumn”><?php if ($Itemid != '1') { ?>
<jdoc:include type="modules" name="breadcrumb" /><?php else { } ?>
<jdoc:include type="component" /></div><div class="rightcolumn"><jdoc:include type="modules" name="right" style="xhtml" /></div>

3 – хотим добавить в центральную колонку модуль (на позиции user1), который будет выводить баннеры (или другую информацию) под текстом статьи, но показывать его только в режиме просмотра полного текста статьи

1
23
45
67
8
<div class="leftcolumn"><jdoc:include type="modules" name="left" style="xhtml" /></div>
<div class="centercolumn"><jdoc:include type="modules" name="breadcrumb" />
<jdoc:include type="component" /></div><?php if (($option == 'com_content') && ($view == 'article')) { ?>
<jdoc:include type="modules" name="user1" style="xhtml" /><?php } else {} ?>
<div class="rightcolumn"><jdoc:include type="modules" name="right" style="xhtml" /></div>

4 – хотим показывать правую колонку (целиком) только для авторизованного пользователя (там будут какие-нибудь модули), а гости будут видеть только левый блок и основной контент

1
23
45
67
<div class="leftcolumn"><jdoc:include type="modules" name="left" style="xhtml" /></div>
<div class="centercolumn"><jdoc:include type="modules" name="breadcrumb" /><jdoc:include type="component" /></div><?php
$user = & JFactory::getUser();if ($user->get('guest') == '1') { } else { ?>
<div class="rightcolumn"><jdoc:include type="modules" name="right" style="xhtml" /></div><?php } ?>

5 – хотим авторизованному пользователю показать приветствие с его именем в правой колонке

1
23
45
6
<div class="leftcolumn"><jdoc:include type="modules" name="left" style="xhtml" /></div>
<div class="centercolumn"><jdoc:include type="modules" name="breadcrumb" /><jdoc:include type="component" /></div><?php
$user = & JFactory::getUser();echo ‘Привет тебе, о великий '.$user->username'; ?>
<div class="rightcolumn"><jdoc:include type="modules" name="right" style="xhtml" /></div>

6 – хотим в произвольном месте шаблона (ну к примеру в левой колонке над модулями) вывести заголовок текущей страницы

1
23
45
67
<div class="leftcolumn">
<?php $document       = & JFactory::getDocument();
echo $document->title; ?><jdoc:include type="modules" name="left" style="xhtml" /></div>
<div class="centercolumn"><jdoc:include type="modules" name="breadcrumb" /><jdoc:include type="component" /></div><div class="rightcolumn"><jdoc:include type="modules" name="right" style="xhtml" /></div>

Дополнительно:

Все необходимые параметры желательно объявить где-нибудь в index.php заранее и дальше только пользоваться. К примеру сразу после вставить
1
23
45
$Itemid = JRequest::getInt( 'Itemid', 1, 'get' );
$option = JRequest::getVar('option', null); $view = JRequest::getVar('view', null); 
$document       = & JFactory::getDocument();$user = & JFactory::getUser();

Дополнительные ссылки:

Accessing the current user object [howto] Создание шаблона для Joomla! 1.5 Шаблонизация для компонентов и модулей, на примере модуля patway и другие ссылки в Joomla FAQ, относящиеся к разделу Шаблоны - установка, создание, проблемные вопросы (много из Joomla 1.0, но много и схожих приемов\примеров) P.S. естественно, что это не открывает Америки и список примеров далеко не полный, но для базовой основы в качестве ответов на 90% вопросов и пищи для размышлений годится
618
2009 02 июня

Разделители стандартного меню при выводе списками UL LI

Древняя проблема движка, перекочевавшая в 1.5 и в joostina Если выставляем публикацию модуля меню через -2 и стилем "плоский список" - он выводится списком UL LI, все прекрасно. Но - не работает опция выставления разделителей между пунктами меню. Работа через CSS не подходит, ибо у последнего пункта разделителя быть не должно. я решаю примитивной модификацией mod_mainmenu.php (это для Joostina && Joomla 1.0)
1
23
45
67
case 1:
        echo '<ul id="'. $menuclass .'">';                foreach ($links as $link) {
                        echo '<li>' . $link . '</li>';                }
        echo '</ul>';break;
заменяю на
1
23
45
67
89
1011
1213
14
case 1:
        echo '<ul id="'. $menuclass .'">';                $spacer_start   = $params->get( 'spacer' );
                $spacer_end     = $params->get( 'end_spacer' );                $n = count($links); $i = '1';
                foreach ($links as $link) {                        if ($i != $n) {
                                $sep = ' class="linksep"';                        } else {$sep = '';}
                        echo '<li'.$sep.'>' . $link . '</li>';                        $i++;
                }        echo '</ul>';
break;
391
2009 22 мая

Чем только не работают программеры

Грешно, конечно, смеяться над людьми, но что поделать, вот очередной раз раскопал завалы приколов с форума
Цитата Димки:
Я программер непростой,
Компонент пишу пестой
Простыня под катом

365
2009 21 мая

Фейковые антивирусы

На одном фрилансерском сайте наткнулся на объявление: "Необходимо разработать продукт, который будет имитировать работу антивируса, например, Касперского. Должны быть все функции, кроме реального поиска антивирусов по базам, данный модуль будет подключен позже, в виде набора компонент. Одним словом получится антивирус полноценный только без движка -..." И как раз на днях были темы на хабре по поводу фейковых антивирусов, имитирующих работу настоящего, но делающих одни пакости. Так вот откуда собако то порылось )))
397
2009 18 мая

Правильный гугль

Копи-паст с хабра, но на память :) 442749_0
1223
2009 18 мая

Модуль вывода произвольного материала !Joomla 1.5

Простенький модуль, необходимо в настройках модуля указать ID материала и опубликовать на нужной позиции. Будет выведен заголовок материала, вступительный текст и ссылка "читать далее" (текст ссылки настраивается в админке). Формат вывода таков:
1
23
45
67
<ul class="custom_article">
       <li>            <h3>Заголовок материала</h3>
            Вступительный текст            <a href="ссылка на подробнее">Текст ссылки на продолжение</a>
       </li></ul>
Скачать модуль произвольного материала