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

1731
2012 21 января

Плагин Hide Guest Content - скрытие контента от гостей - !Joomla 1.6 и 1.7

Обновление старого плагина для 1.5, позволяющего скрывать часть текста в материале от незарегистрированных пользователей (деления по ACL нет и не планируется).

Использование:

  1. установить и опубликовать плагин
  2. в материале нужный блок текста обрамить тегами: {gcontent}скрытый материал для пользователей гостям не виден{/gcontent}
  3. заглушка для гостей заключена в DIV с классом guest_only, возможно настроить оформление предупредительного блока по собственному желанию
Скачать:

Обновленная версия для 2.5 с разграничением прав доступа по группам пользователей находится здесь

662
2012 14 января

Модуль календаря на весь текущий год (Joomla 1.5 1.7)

Опять же не знаю кому нужно, но на всякий случай пусть лежит. Суть - модуль выводит календарь всего текущего года в классическом бумажном виде, выходные подсвечиваются, текущий день выделяется (все в CSS). Использовался класс от разработчика Jim Mayes, чуть модифицировал под русский язык, заморачиваться с setlocale не стал, потому только хардкор, только кириллица. P.S. размеры большие, потому рекомендую вставлять в пустой материал через loadmodule Скачать модуль календаря на весь текущий год (Joomla 1.7) Скачать модуль календаря на весь текущий год Joomla 1.5)
445
2011 30 декабря

Модуль прокрутки дат для поиска созданных материалов

Не знаю зачем, но набросал вот такое решение - в блоке прокручиваем даты, по клику показываются материалы, созданные выбранным днем.

Только Joomla 1.7, только mootools (стандартный для движка, версии 1.3).

Рабочий пример http://beliyadm.rcoi.net/joomla17demo/. В демке вбиты материалы на 28-29 декабря 2011 В центре прокрутки показывается выделенным цветом текущий день, високосные года не учитывал, даты показываются только для года текущего. То есть если завтра наступит 2012 год - модуль покажет дни с 1.01.2012 до 31.12.2012 Выходные дни обведены в рамку, отображение все настраивается в modules\mod_slider_calendar\style\horizontal.css и немного параметров ширины блоков в хелпере модуля

Установка - скачать архив slider_calendar_UNZIP_FIRST.zip, распаковать, установить модуль и поисковый плагин, опубликовать

Скачать slider_calendar_UNZIP_FIRST (Joomla 1.7 only)

Тема на joomlaforum.ru
708
2011 21 ноября

Новая версия универсального модуля для Virtuemart 2.1

Предлагаю вашему вниманию обновленную версию универсального модуля отображения товаров для VirtueMart 1.1.9 и Joomla 1.5. Примеры демонстрации можно увидеть на главной странице

Предыдущую версию 1.2.3 можно скачать здесь или здесь

Внедрено:

- кнопка "купить" на ajax
- "человеческий выбор категорий" из мульти селекта (см. спойлер)
- возможность автоматической выборки подкатегорий из указанной категории
- три варианта вывода цены (просто цена, с налогом, с налогом+скидка)
- многоязычность (пока просто рус\англ, другие переводы самостоятельно делать не планирую)
- определение длины заголовка
- lightbox из модуля (опционально)
- эффект zoom из модуля (опционально)

1275
2011 21 ноября

AJAX проверка для формы регистрации для Joomla 1.7

AJAX проверка для формы регистрации для Joomla 1.7

Рассмотрим один из примеров использования AJAX технологий с использованием стандартного Mootools 1.3, встроенного в Joomla 1.7, на примере формы регистрации - на лету при вводе проверить, свободны ли имя пользователя и email.

Для Joomla 1.5 коллега SmokerMan уже приводил пример, но нам он не подходит по причине другой версии mootools и мы хотим чуть расширить возможности (по этой же причине ни в коем случае (irony) не читайте эту статью http://docs.joomla.org/Ajax_using_MooTools, поскольку авторы сами предупреждают "This article applies to Joomla! 1.5 only as Joomla! 1.6 ships with a later version of MooTools which has a different way of handling Ajax requests.")

Посмотреть в работе можно здесь - http://beliyadm.rcoi.net/joomla17demo/index.php/using-joomla/extensions/components/users-component/registration-form
Тестовые логины - admin, test
Тестовый email - test@mail.ru

629
2011 16 ноября

Использование SQL запросов для формирования выпадающих списков в XML

Использование SQL запросов для формирования выпадающих списков в XML

При создании формы в расширениях движка есть замечательная возможность на лету формировать выпадающие списки на основе информации в базе данных. В данной статье рассмотрим подобные трюки для списков в XML (полезно, к примеру, при создании админской части модулейплагинов)

Данная статья актуальна для версий движка 1.61.7
Для !J1.5 стоит ознакомиться с статьями http://docs.joomla.org/Sql_parameter_type и http://docs.joomla.org/Parameter (в этой версии движка использовались параметры и немного другой синтаксис)
Общий список типов полей для форм можно найти здесь http://docs.joomla.org/Standard_form_field_types (англ)


Перечень параметров формирования выпадающего списка в XML

  • type (обязательно) обязательно должно быть sql.
  • name (обязательно) уникальное имя поля. Должно совпадать с именем столбца из результатов выборки в запросе, либо же возможно использование другого имени, указанного в value_field.
  • label (обязательно) (возможно использование значений из языкового файла) описание данного поля.
  • query (обязательно) SQL запрос, который формирует данные для выпадающего списка. Запрос должен обязательно возвращать два значения. Первое, value (можно переопределить в key_field) содержит значения для поля value элемента формы. Второе может быть названо как угодно (название можно переопределить атрибутом value_field) содержит отображаемый текст элементов списка.
  • default (опционально) значение по умолчанию. Соответствует полю 'value', либо переопределенному атрибуту key_field.
  • description (опционально) (возможно использование значений из языкового файла) текст отображаемый в всплывающей подсказке при наведении на выпадающий список.
  • key_field (опционально) если не задан – используется имя столбца из запроса, определенное как value. Либо же можно определить свой алиас столбца запроса для value и назначить его этому атрибуту.
  • value_field (опционально) имя столбца, которое формирует отображаемые значения выпадающего списка. Если не задан – будет использоваться столбец с тем же именем, что и name

Несколько примеров использования в XML:

1
<field name="title" type="sql" default="10" label="Select an article" query="SELECT id AS value, title FROM #__content" />

Обратите внимание, что в данном примере нам необходимо использовать конструкцию AS, чтобы определить значение поля value, поскольку таблица jos_content в качестве первичного ключа содержит столбец ID, но не VALUE. Большинство же таблиц, испольлзуемых Joomla имеют столбец первичного ключа с названием VALUE. Кроме того всегда можно использовать атрибут key_field для определения столбца

1
<field name="title" type="sql" default="10" label="Select an article" query="SELECT id, title FROM #__content" key_field="id" />

Данный пример вернет идентичный, по сравнению с предыдущим, результат.

Далее мы хотим дать нашему полю имя не title, а MyField. Для этого нам нужно использовать алиас AS в SQL запросе

1
<field name="myfield" type="sql" default="10" label="Select an article" query="SELECT id AS value, title AS myfield FROM #__content" />

Либо альтернативный вариант с переопределением атрибута value_field.

1
<field name="myfield" type="sql" default="10" label="Select an article" query="SELECT id, title FROM #__content" key_field="id" value_field="title" />

Также можно использовать стандартные конструкции t-sql. К примеру мы хотим в выпадающем списке видеть дату создания рядом с названием статьи

1
<field name="title" type="sql" default="10" label="Select an article" query="SELECT id, ( title, ' - ', created) AS title FROM #__content" />

Примечание: все выражения SQL будут работать только на той базе данных, что использует данная инсталляция движка (обычно это MySQL). Нет никакой возможности писать запросы к другим базам (пусть и в пределах одного сервера)

Примечание: Префикс таблиц в данных конструкциях указывается в виде #_, при выполнении он будет автоматически заменен на префикс таблиц базы данных, используемых движком

496
2011 16 ноября

Создаем RSS ленту для всех материалов контента в Joomla 1.7

Создаем RSS ленту для всех материалов контента в Joomla 1.7

Все мы прекрасно знаем (я надеюсь на это), что в движка Joomla с версии 1.5 и выше нельзя сделать блог материалов из нескольких категорий. В 1.0.х можно было через ctrl выделить категории и счастье в блоге.
Почему это может огорчать в 1.7 (при грамотном подходе к структуре сайта, естественно)? Потому что штатными средствами у нас не получается сделать RSS ленту всех материалов сайта.
Штатный модуль "Syndication Feeds" формирует ленту только на основе отображаемых на странице материалов, а значит только по отдельным категориями. Нам это не подходит.
И выход есть.


Наши действия для достижения дзен

  • Создать корневую категорию "TopLevel", к примеру, её указать родителем для всех других категорий контента
  • В неопубликованном на сайте меню создать ссылку типа "Блог категории" на наш корневой уровень, при использовании штатного SEF можно дать алиас, вроде "rssarticles"
  • В настройках этого меню выставить параметр "Включать подкатегории" == "да" на вкладке "Параметры макета Блога" (см. скрин ниже)
  • На время опубликовать модуль меню с этой ссылкой и штатный модуль "Syndication Feeds", перейти по его ссылке и запомнить выдаваемый URL, к примеру он может выглядеть так http://site.ru/index.php/rssarticles?format=feed&type=rss. Снять с публикации модуль RSS и переместить модуль меню на неопубликованную позицию
  • В любом месте сайта создать иконку-ссылку на ленту RSS, указав в качестве источника полученный URL
Создаем RSS ленту для всех материалов контента в Joomla 1.7
401
2011 30 октября

Произвольный HTML в стандартных контактах Joomla 1.7

Очередной раз очередные грабли. Итак банальщина - нужно добавить в контакты движка версии Joomla 1.7.xx штатными средствами, к примеру, фрагмент карты с google maps (или откуда еще). Требуемый код выглядит так:
1
<iframe width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.ru/maps?hl=ru&q=cathbxtcrbq+rjym&lr=&ie=UTF8&t=h&vpsrc=6&source=embed&ll=55.354135,40.297852&spn=0.149233,0.334396&z=12&output=embed"></iframe><br /><small><a href="http://maps.google.ru/maps?hl=ru&q=cathbxtcrbq+rjym&lr=&ie=UTF8&t=h&vpsrc=6&source=embed&ll=55.354135,40.297852&spn=0.149233,0.334396&z=12" style="color:#0000FF;text-align:left">Просмотреть увеличенную карту</a></small>
Даже при отключенном визуальном редакторе этот код режется до стандартного html при вставке в поле "дополнительная информация" (misc info). Решение - открыть файл administrator\components\com_contact\models\forms\contact.xml, найти блок для
1
<field name="misc" ... >
и заменить фильтр safehtml на raw. В итоге выглядит так
1
23
45
67
8
<field name="misc" type="editor"
                        label="COM_CONTACT_FIELD_INFORMATION_MISC_LABEL"                        description="COM_CONTACT_FIELD_INFORMATION_MISC_DESC"
                        class="inputbox"                        filter="raw"
                        buttons="true"                        hide="readmore,pagebreak"
                         />
Все, код сохранился, карта видна.
360
2011 06 октября

Обновляем Joomla 1.6.5 до Joomla 1.7

Обновиться до версии Joomla 1.7 теперь можно в одно действие, если ваш текущий сайт работает под управлением версий 1.6.5 либо 1.6.6 Если ваш сайт работает на базе движка более ранней версии или же вы предпочитаете другие пути обновление, ознакомьтесь с следующими вариантами:
  • Традиционное обновление при помощи Менеджера расширений
  • Обновление сайтов под управлением версий младше 1.6.5 (линейка 1.6)
  • Ручное обновление для 1.6.5/1.6.6 до 1.7
  • Переход с Joomla 1.5 до Joomla_1.6 +
Полный текст статьи можно прочитать по ссылке
418
2011 05 октября

Склонения в датах (joomla 1.7)

По аналогии с статьей для 1.0, но еще проще можно сделать склонения дат для Joomla 1.7. Открываем файл language\ru-RU\ru-RU.ini и находим строки примерно с 222 - идут предустановленные форматы дат. Если при выводе информации использовать уже существующий формат DATE_FORMAT_LC3 то на выходе получается "10 Июль 2010". Не очень красиво, согласен, в таком случае в том же файле чуть ниже находим определение строк с наименованиями месяцев, среди них редактируем все, которые без "_SHORT", превращая
1
JANUARY="Январь"
в
1
JANUARY="Января"
и так далее. На этом все, везде, где дата выводится через LC3
1
JHtml::_('date',$this->item->publish_up, JText::_('DATE_FORMAT_LC3'))
будет корректно написано: "10 Июля 2010" Либо вы можете создать свой собственный формат вывода даты, к примеру:
1
DATE_FORMAT_LC5="d F Y H:i"
что будет создавать строку "10 Июля 2010 23:50"
1828
2011 28 сентября

Модуль последних сообщений с SMF 2.0 stable and Joomla 1.7 версия 1.3.0

Версия модуля mod_latestsmf 1.3.0 для Joomla 1.7 и SMF 2.0 stable Обязательные требования: 1 – после установки модуля указать в настройках абсолютный путь к файлам форума DOCUMENT_ROOT/smf_path/ (слеш на конце обязателен) 2 – наличие на сервере библиотеки mb_substr 3 – форум должен быть установлен с указанием кодировки UTF-8 (на 1251 не тестировал, ничего не могу сказать) Возможности модуля: - выборка либо последних сообщений либо последних тем форума - указание количества объектов - количество выводимых символов (если работать в режиме последних тем, то больше 240 символов в теле сообщения выводить нельзя) - 6 предустановленных форматов даты Обсуждение модуля на JoomlaForum Скачать: mod_lastsfm_1.3.0
2651
2011 14 апреля

Всплывающее окно авторизации (jquery)

Не знаю, почему вспомнил про такую банальщину, но в блоге снова недавно спросили "а как сделать по клику на сайте всплывающий блок с формой авторизации". Потому, как это ни пошло выглядит, опишу пару элементарных действий. Код на основе Jquery, на mootools переписать желающим проблем нет.
Итак по порядку 1 - создаем новую позицию вывода модуля, к примеру, "login", на ней публикуем модуль авторизации, задаем суффикс класса модуля "-login" 2 - в шаблоне index.php сразу после открытия прописываем вывод
1
<jdoc:include type="modules" name="login" style="xhtml" />
3 - в хедере индекса шаблона пишем (код для примера)
1
23
45
67
89
1011
12
<script type="text/javascript">
                $(document).ready(function(){                        $("#modloginajax").click(function () {
                                $(".moduletable-login").slideToggle("slow");                        });
                });                $(document).ready(function(){
                        $("#login_closs_ico").click(function () {                                $(".moduletable-login").slideToggle("slow");
                        });                });
</script>
Первый блок отвечает за поведение какой-либо ссылки в теле страницы, у которой задан id="modloginajax", располагать эту ссылку можно где угодно, в моем случае она зашита в модуль поиска и выглядит так (return false зачем прописан объяснять не буду, чтобы при поддержке JS не было перехода на ссылку, а если поддержки нет - чтобы переход работал)
1
23
45
67
8
<?php
$user =& JFactory::getUser(); if (!$user->id) {
?><a href="<?php echo JURI::base(); ?>/login.html" title="Авторизация" id="modloginajax" onclick="return false;">Вход</a>
<?php } else  { ?><a href="<?php echo JURI::base(); ?>/login.html" title="Выход <?php echo $user->username; ?>" id="modloginajax" onclick="return false;">Выход</a>
<?php } ?>
Второй блок кода отвечает за поведение кнопки "закрыть окно", у меня это картинка с id="login_closs_ico", зашитая в шаблон модуля авторизации до начала всех условий
1
<img src="close.png" alt="Закрыть" title="Закрыть" id="login_closs_ico" />
Ну и немного CSS кода (оформляем как угодно)
1
23
45
67
8
.moduletable-login {
        display: none; right: 30px; top: 80px; width: 300px;        z-index:1000;
        position: absolute;        background-color: #fff; border: 1px solid #8CC2DB;
        padding: 5px 10px 5px 10px;}
#login_closs_ico {position: absolute; right: 15px; top: 10px; cursor: pointer;}
Банальщина полная, конечно же, но мало ли кому пригодится, а то ставят мега модули с кучей кода, когда все решается элементарно. Как выглядит в работе можно посмотреть на http://rcoi.net/ справа вверху под поиском ссылка "вход"

Другой способ реализации от Fedor

Вместо
1
2
<img src="close.png" alt="Закрыть" title="Закрыть" id="login_closs_ico" />
<div id="login_closs_ico"></div>
Стиль
1
23
45
67
89
#login_closs_ico {
position: relative;right: 15px;
top: 10px;width: 15px;
height: 16px;cursor: pointer;
background-image: url(data:;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAAQCAYAAADJViUEAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGmSURBVHjafJO9isJAEMcnMSIqh/HQRkEUe5/A9xAEe9/CRhALa7ETEXwEBW0srazlChFFTbEx5Pw6gs7NLpfgetE/DNmd2d/sZHZXud/vXwCgk4GiKOBqvV5DOByGRCIh5ogoxUkWEGyjj0zTxEajgcfjUcxpnRfjY86plMEBH8XjcTAMA5rNJryQw3dm+EKdTgd1XUfGfJcwFd7Itm2wLAvm87lv/C08HA7Fd7vdSn7ePAE/dtB1co3HY5hOp2IcDAYl2GW0Z+dut4NutwvtdhtutxuoqgrpdNq/tMeG9Xo9zGazfHvPYrEYbjYb34bxUgVcr9clyDXaWSR9CQ8GA7GwUChgtVrFWq2G5XLZS0Bl42Kx+A/TGbJisYj0j3i5XKRoq9XCaDQqEuRyOaQmyvBkMmGj0UiCHq/ibDbDSqWCyWRSXJhSqYT9fh/3+z1TVqsVy2Qyn8+NfH4I/BSWyyXQXYdUKgX5fN5UTqcTfxgfVJ4vfL1e4XA4wPl8Fn7+0vhasm8tFAoZFPjhZxoIBDyIm+M4AtY0DahkiEQiAv5Lbv0KMABkx7NcfuTtxgAAAABJRU5ErkJggg==);}
Здесь кодируем к примеру наше изображение http://www.askapache.com/online-tools/base64-image-converter/ Результат на 1 один запрос меньше, css кешируется Кнопка закрытия в данном случае с вашего примера
672
2010 14 декабря

Download DatsoGallery free all version

Оригинальная тема на форуме Note: DatsoGallery based on component Akogallery 2.1 by Arthur Konze. This component (Akogallery) released under the GNU/GPL License. In terms of the GNU/GPL turns out that DatsoGallery is GNU/GPL licensed and distributed free of charge. Версия 1.8.8 Скачать архив 4.66 Mb (Спасибо Aquarius за организацию доставки). Подробности содержимого архива в продолжении материала
1620
2010 07 марта

Создание новых стилей вывода модуля в файле modules.php

В шаблонах для движка 1.5 вставка позиции модуля происходит следующим образом
1
<jdoc:include type="modules" name="left" style="xhtml" />
Если с полем name все понятно (имя позиции из списка созданных в XML файле шаблона), то вот с полем style частенько возникают вопросы - что это, зачем и что можно с ним делать. Разберем сначала вывод хтмл по умолчанию при стиле XHTML - в исходном коде получается следующее
1
23
4
<div class="moduletable">
<h3>заголовок модуля</h3>тело модуля
</div>
А что же нам делать, если хотим чуть усложнить структуру, дабы вписаться в разработанный дизайн либо иное? Все очень просто.
Мы идем в папку шаблона, в ней видим (и если не видим то создаем папку [b]html[/b]), в ней находим (а если не находим то создаем файл [b]modules.php[/b]). В нем к примеру пишем такую функцию
1
23
45
67
89
1011
12
function modChrome_mycustomdiv($module, &$params, &$attribs)
{        $headerLevel = isset($attribs['headerLevel'])? (int) $attribs['headerLevel'] : 3;
        if (!empty ($module->content)) : ?>                <div class="mycustomdiv<?php echo $params->get('moduleclass_sfx'); ?>">
                        <?php if ($module->showtitle) : ?>                                <div class="mycustomdivtitle"><h3><?php echo $module->title; ?></h3></div>
                        <?php endif; ?>                        <?php echo $module->content; ?>
                </div>        <?php endif;
}
И в шаблоне index.php для style теперь указываем значение mycustomdiv. То есть имя функции обязательно должно начинаться с modChrome_ а то что после подчеркивания нужно использовать в качестве значения style при выводе в шаблоне
1
<jdoc:include type="modules" name="left" style="mycustomdiv" />
В итоге у нас хтмл вывод будет таким
1
23
4
<div class="mycustomdiv">
<h3>заголовок модуля</h3>тело модуля
</div>
По порядку, что мы здесь видим: $params->get('moduleclass_sfx') - суффикс модуля, заданный в его настройках $module->showtitle - заголовок модуля и соответственно проверку условия, если в настройках отмечен к показу - то выводим в тегах h3 $module->content - тело модуля, зависит от хелпера модуля либо других вариаций вывода
449
2010 15 февраля

Убираем ошибку с дублированием id=current в стандартном mod_mainmenu

Убираем ошибку с дублированием id=current в стандартном mod_mainmenu Если на сайте используется несколько модулей меню на основе стандартного mod_mainmenu - мы получаем досадную ошибку валидации - для каждого активного пункта меню UL LI создается id="current" (в случае создания связанных меню, многоуровневых либо просто дублирование модуля) Лечится просто - в файле templates/шаблон/html/mod_mainmenu/default.php (что это такое и что делать если такого файла нет - объяснять не буду, читаем документацию по шаблонизации движка) находим строку примерно 71
1
$node->addAttribute('id', 'current');
и заменяем на
1
$node->addAttribute('id', 'current'.$id);
Теперь у нас к каждому current добавляется идентификатор itemid и достигаем дзена в плане валидации страницы
340
2010 28 января

Севастополь ретроальбом 2006

Ретроальбом Севастополя На днях (году в 2006) приобретена книга "Севастополь ретроальбом", автор Иванов Алексей Валерьевич, издание Библекс 2006 год. Тираж издания 1000 экземпляров, приобрести в собственность практически нереально, соответственно без угрызений совести данное издание, как обязательное в коллекции каждого Севастопольца, публикуется на моем сайте
Скачать сканированный архив книги
Смотреть по страница можно здесь
734
2009 09 ноября

Стандартный SEF в Joomla 1.5 и с чем его едят (miniFAQ)

logo В линейке 1.5 появилась замечательная вещь – создание SEF ссылок стандартным образом, без использования сторонних компонентов. В компонентах за поддержку данной возможности отвечает специальной файл router.php, в стандартных он существует, но не все разработчики сторонних компонентов включают эту возможность в свои расширения. Для активации этой прекрасной опции необходимо включить три переключателя (скрин и примеры ниже) и переименовать файл htaccess.txt в .htaccess (да да, именно так - с точкой вначале. Стандартный файловый менеджер windows "explorer" может не позволить этого сделать, тогда следует использовать сторонние менеджеры - TotalComm-r, Far, DOpus и подобные). При этом если мы используем все три опции – необходимо чтобы на сервере была поддержка mod_rewrite (убедиться можно посмотрев страницу «админка – помощь – информация о системе - информация PHP» либо обратиться в службу поддержки хостинга)

581
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
537
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
785
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. обращаю внимание, что парсер моего блога перевирает одинарные кавычки, потому просто копи\паст работать не будет