Откомменченное

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

2525
2009 14 мая

Плагин “Content - Spoiler Text” - скрытый текст в контенте (спойлер)

Плагин Content - Spoiler Text Плагин pb_spoiler ver. 1.0 только для версии !Joomla 1.5 Что это такое - возможность создать в контенте разворачиваемые блоки скрытого текста с эффектом анимации, при этом используется библиотека Jquery и плагин Accordeon от разработчика Jorn Zaefferer

1093
2009 11 мая

Копии модулей, шаблонизация в !Joomla 1.5

Задача - требуется на сайте получить два модуля с одним функционалом, но с разным оформлением (и\или показом разных элементов). В данном примере берём модуль последних новостей mod_latestnews 1 - в файле mod_latestnews.xml добавляем параметр
1
<param name="modtype" type="text" default="" label="Custom type module" description="Custom type module" />
2 - в админке клонируем модуль (чекбокс и кнопка COPY) и задаём значение клона в поле "Custom type module" в "copy1" 3 - в файле mod_latestnews\tmpl\default.php (то есть шаблоне оформления данного модуля) добавляем получение нового параметра и строим условие
1
2
$modtype = $params->get('modtype');
if($modtype == 'copy1') { } else {}
и дальше пишем всё что нам нужно. P.S. согласно возможностям шаблонизатора можно файл default.php создать в каталоге current_template/html/mod_latestnews/default.php и производить действия в нём
897
2009 09 мая

Приколы Тёмы Лебедева

Нашел давеча пару забавных вещей на http://www.artlebedev.ru/
  • Верстка в основе своей табличная (!!!). При этом с детскими ошибками вроде topmargin и height для TABLE, style без указания type и прочее
  • При попытке посмотреть исходный код в мозилле через CTRL+U получил чудную надпись < !-- meta name="GENERATOR" content="Microsoft FrontPage 1.0" -- > и только ниже на экран код страницы
Странные вещи творятся в этом мире ...
428
2009 08 мая

Цитата из журнала "Наука и Техника", апрель 2009

Цитата из колонки главного редактора к апрельскому номеру (канун дня космонавтики), думаю что комментировать с моей стороны не нужно. "Посетивший недавно ХАИ летчик-космонавт Олег Коноваленко – выпускник моего 4-го «космического факультета» был поражен обилием грамматических ошибок, которые допускали студенты 3-го курса в своих записках к нему. Даже ректор украдкой исправлял особо одиозные «ляпы», прежде чем отдать записку с вопросом космонавту… Что сказать? Убили Школу, убили Высшую Школу, убили Научную Школу.. Убили Праздник.. "
663
2009 28 апреля

IT образование

bobbi
Дамы и господа! Сейчас вы услышите трагическую и поучительную историю о мальчике Бобби, который любил хахахаха

449
2009 26 апреля

Error.log краткое описание и примеры

errorl log apache По мотивам постоянных вопросов: "У меня снова белое окно при входе на сайт\админку" и прочее набросан краткий текст по основам error.log - что такое, где найти, типы ошибок. Текст будет пополняться по мере накопления информации. Ссылка на joomlaforum.ru
607
2009 22 апреля

Мелкие фишки в шаблонах Joomla 1.5

logo Для упрощения жизни себе любимого использую мелкие фишки в index.php шаблона, для памяти и зафиксируем. В дальнейшем список будет пополняться, по мере накопления\вспоминания подобных мелких приятностей
1
23
45
67
89
10
$Itemid         = JRequest::getInt( 'Itemid', 1, 'get' );
$document       = & JFactory::getDocument();$config         = & JFactory::getConfig();
//set correct page title: PAGE TITLE - SITE NAMEif ($Itemid != '1') {
$curtitle = $document->title.' - '.$config->getValue('sitename');$document->setTitle( $curtitle );
} else {}//set var to template files
$tplurl = $config->getValue('live_site').'/templates/'.$document->template;

Все это добро находится сразу после открытия HEAD, по порядку что делаем:
  • получили значение Itemid текущей страницы для формирования заголовка и прочих условий в шаблоне
  • получили массивы $document (текущая страница) и $config (файл конфига), посмотреть содержимое можно распечатав их через print_r
  • сформировали корректный (на мой взгляд для СЕО) заголовок страницы: Заголовок материала - Название сайта (из конфига). Зачем - Joomla 1.5.10 почему то подставляет в титл только заголовок текущей страницы, без названия сайта, что не есть хорошо
  • сформировали переменную с полным путем до файлов шаблона $tplurl, в дальнейшем я очень удобно использую ее, к примеру, для подключения файлов стилей, картинок и прочего
1
<link rel="stylesheet" href="<?php echo $tplurl ?>/css/template.css" type="text/css" />
1452
2009 08 апреля

Системные сообщения frontend !J 1.5

logoПри создании собственного шаблона частенько можно забыть такую вещь, как системные сообщения движка (к примеру после отправки сообщения стандартным компонентом контактов).
Чтобы включить в шаблон их отображение, достаточно в нужном месте index.php шаблона добавить строку
1
<jdoc:include type="message" />
Формированием данных сообщений занимается файл libraries\joomla\document\html\renderer\message.php. К примеру, мне очень не нравилось, что над собственно текстом есть надпись "Сообщение", чтобы ликвидировать требуется закомментировать строку 64 (для версии 1.5.10)
1
$contents .= "\n<dt class=\"".strtolower($type)."\">".JText::_( $type )."</dt>";
Стили CSS (совершенно не понимаю, зачем разработчики здесь используют столь редко встречаемые списки определений DL DD): #system-message - весь блок сообщения #system-message dd.message ul - список, формирующий сообщения #system-message dd.error ul - список, формирующий сообщения об ошибках Данный функционал можно использовать и в своих расширениях, к примеру (взял из контактов для образца) в контроллере редирект на страницу после какого-либо действия (при условии нахождения в языковом файле соответствующей строки, можно просто текст)
1
2
$msg = JText::_( 'Thank you for your e-mail');
$this->setRedirect($link, $msg);
При желании можно заменить эти подсказки на обычные JS алерты, для этого в том же файле libraries\joomla\document\html\renderer\message.php находим кусок
1
23
45
67
89
1011
1213
1415
1617
1819
2021
22
// If messages exist render them
                if (is_array($lists))                {
                        // Build the return string                        $contents .= "\n<dl id=\"system-message\">";
                        foreach ($lists as $type => $msgs)                        {
                                if (count($msgs)) {                                        $contents .= "\n<dt class=\"".strtolower($type)."\">".JText::_( $type )."</dt>";
                                        $contents .= "\n<dd class=\"".strtolower($type)." message fade\">";                                        $contents .= "\n\t<ul>";
                                        foreach ($msgs as $msg)                                        {
                                                $contents .="\n\t\t<li>".$msg."</li>";                                        }
                                        $contents .= "\n\t</ul>";                                        $contents .= "\n</dd>";
                                }                        }
                        $contents .= "\n</dl>";                }
                return $contents;
и заменяем на
1
23
45
67
89
1011
1213
14
if (is_array($lists))
                {                        // Build the return string
                        foreach ($lists as $type => $msgs)                        {
                                if (count($msgs)) {                                        foreach ($msgs as $msg)
                                        {                                                $contents .= '<script language="javascript" type="text/javascript">alert("'.$msg.'")</script>';
                                        }                                }
                        }                }
                return $contents;
Для всех случаев не проверял данный хак, но при регистрации работает
1152
2009 27 марта

Плагин-кнопка для редактора Joomla 1.5

plg_demobutton - простейшая демонстрация реализации плагина, что добавляет кнопку в визуальный редактор для вставки собственных конструкций. Демка добавляет в материал строку < div class="demo-text" / > Обновленная версия плагина 1.1

Описание:

  1. создает в визуальном редакторе пользовательскую кнопку
  2. теги, вставляемые кнопкой настраиваются в админке плагина, просто вписать в поле Button name, по умолчанию вставляет {cbutton}text{/cbutton}
  3. название кнопки также изменяется в настройках, поле Button name
  4. клонировать в админке плагин нельзя, ибо требуется совпадение названия классов с названием плагина
  5. если все таки требуется клонировать, то придется создавать несколько версий плагина, при этом изменять имена (к примеру новая кнопка называется new_button):
  6. class plgButtondemobutton на class plgButtonnew_button function plgButtondemobutton на function plgButtonnew_button function insertDemo на function insertDemoNew
    1
    
    $button->set('onclick', 'insertDemo(\''.$name.'\');return false;');
    на
    1
    
    $button->set('onclick', 'insertDemoNew(\''.$name.'\');return false;');

Надеюсь, что этого функционала для быстрой вставки любого текста в редактор, будет достаточно. У себя тестировал вставкой целой HTML таблицы заданной конфигурации - работает без вопросов, как в режиме визуального редактора, так и обычного текста В качестве быстрого разворачивания каких-либо функций вполне подойдет.

Скачать на Joomlafoum.ru либо зеркало
1073
2009 15 марта

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

Обновление - версия для Joomla 1.6 и 1.7 Аналог мамбота mosif версии 1.0.х Что делает - позволяет в материале скрыть часть текста от незарегистрированного пользователя (гостя) - будет выведена предупредительная заглушка. Текст заглушки редактируется в админке плагина. Использование: 1 - установить и опубликовать плагин 2 - в материале нужный блок текста обрамить тегами: {gcontent}скрытый материал для пользователей гостям не виден{/gcontent} 3 - заглушка для гостей заключена в DIV с классом guest_only, возможно настроить оформление предупредительного блока по собственному желанию Текущая версия - 1.0, тестировалось на 1.5.9 в native режиме Скачать на joomlaforum либо зеркало Обновленная версия для 2.5 с разграничением прав доступа по группам пользователей находится здесь
1866
2009 09 марта

Стандартный поиск по отдельным категориям, !Joomla 1.0.xx

logoС подачи пользователя DK-Scorp набросан данный хак. Что делает - добавляет в стандартный компонент поиска движка возможность выбора категории, в которой производить поиск. По умолчанию данный пример работает на выбор всех категорий всех разделов, нужно ограничить - смотрим первый запрос. Топорно но работает (осторожно много хаков :))
Файл search.php компонента, функция viewSearch После строки
1
$ordering = strtolower( strval( mosGetParam( $_REQUEST, 'ordering', 'newest') ) );
добавляем
1
$category = strtolower( strval( mosGetParam( $_REQUEST, 'category', '') ) );
после
1
$lists['searchphrase']= mosHTML::radioList( $searchphrases, 'searchphrase', '', $searchphrase );
добавляем (запрос для образца, прочие проверки публикации, просроченности etc добавляем самостоятельно)
1
23
45
67
89
1011
1213
//category select
    $query = "SELECT id, title "                . "\n FROM #__categories  "
                . "\n WHERE section in (SELECT id FROM #__sections)   "                . "\n AND published = 1 "
                ;        $database->setQuery( $query );
        $catlist = $database->loadObjectList();        $orders = array();
        foreach ($catlist as $catrow) {                $catlists[] = mosHTML::makeOption( $catrow->id, $catrow->title );
        }        $lists['category'] = mosHTML::selectList( $catlists, 'category', ' class="inputbox"', 'value', 'text', $category  );
Ниже находим строку
1
$results = $_MAMBOTS->trigger( 'onSearch', array( $database->getEscaped( $searchword ), $phrase, $ordering) );
и заменяем на
1
$results = $_MAMBOTS->trigger( 'onSearch', array( $database->getEscaped( $searchword ), $phrase, $ordering, $category ) );
Файл search.html.php в функции searchbox добавляем новую строку
1
23
45
67
8
<tr>
        <td colspan="3">                <label for="search_ordering">
                        SELECT CATEGORY:                </label>
                <?php echo $lists['category']?>        </td>
</tr>
В функцию display добавляем строку
1
$category = strtolower( strval( mosGetParam( $_REQUEST, 'category', '' ) ) );
Ну и наконец файл бота content.searchbot.php Дополнительный параметр в функцию
1
function botSearchContent( $text, $phrase='', $ordering='', $category='' )
и в запрос который отмечен комментом "search content items" добавить условие
1
. "\n AND a.catid = ".$category.""
Ну и соответственно если список категорий нужно будет ограничить одним либо несколькими разделами, то смотрим наш первый добавленный запрос, что формирует собственно список Скриншот: Стандартный поиск по отдельным категориям Joomla 1.0.xx
724
2009 04 марта

Пустой компонент для !Joomla 1.5

Набросал на коленке простейший компонент для 1.5 (MVC и не пахнет) com_demo 1.0 1 - установить компонент 2 - в меню создать ссылку на Demo Component 3 - зайти фронтендом на страницу компонента, выбрать дату и посмотреть на результат 4 - посмотреть на файл components\com_demo\demo.php и переделать под себя Качать здесь либо mirror
378
2009 03 марта

Подключаем стандартный календарик в Joomla 1.5

без комментариев ))
1
2
JHTML::_('behavior.calendar'); 
echo JHTML::_('calendar', $cal_var, 'cal_var', 'cal_var', '%Y-%m-%d %H:%M:%S', array('class'=>'inputbox', 'size'=>'25',  'maxlength'=>'19'));
596
2009 28 февраля

Модифицируем mod_latestnews в !Joomla 1.5

К примеру, хотим добавить в модуль дату создания материала, для этого в файле modules\mod_latestnews\helper.php добавляем строку в цикле foreach ( $rows as $row ) {}
1
$lists[$i]->created = htmlspecialchars( $row->created );
И в файле modules\mod_latestnews\tmpl\default.php в нужном месте оформляем вывод:
1
echo $item->created;
856
2009 27 февраля

Постраничная навигация в компоненте !Joomla 1.5

Всем известно, как добавлять постраничную навигацию в своем компоненте на базе Joomla 1.0.хх Теперь аналогично, но для версии 1.5, вместе с запросом из базы
1
23
45
67
89
1011
$db =& JFactory::getDBO();
$limit   = $mainframe->getUserStateFromRequest("$option.limit", 'limit', 14, 'int'); \\ количество на страницу$limistart  = JRequest::getVar('limitstart', 0, '', 'int'); \\откуда начинаем отсчет
jimport('joomla.html.pagination'); \\подключаем класс$db->setQuery(‘SELECT * FROM jos_content WHERE catid = '1' LIMIT limistart limit  );
$allcount = 'хх'; \\ общее количество записей из запроса$pageNav = new JPagination( $allcount, $limistart, $limit );
foreach($rL as $r) {//результат запроса
}echo $pageNav->getListFooter(  ); //постраничная навигация
Оригинал статьи и расширенные комментарии здесь $pageNav->getListFooter(); - все параметры постраничной навигации $pageNav->getPagesLinks(); - только ссылки туда\обратно и номера страниц echo $pageNav->getPagesCounter(); - страниц 1 из 4 echo $pageNav->getLimitBox(); - выпадающий список сортировки
602
2009 23 февраля

Боян о программистах

bugsЛюбой русский программист, после пары минут чтения кода, обязательно вскочит и произнесет, обращаясь к себе: переписать это все нафиг.

Потом в нем шевельнется сомнение в том, сколько времени это займет, и остаток дня русский программист потратит на то, что будет доказывать самому себе, что это только кажется, что переписать это много работы. А если взяться и посидеть немного, то все получится. Зато код будет красивый и правильный.

Hа следующее утро русский программист свеж, доволен собой и без единой запинки докладывает начальству, что переписать этот кусок займет один день, не больше.

621
2009 21 февраля

Joomla 1.5.9 и global переменные

Имеем на входе Joomla 1.5.9, php 5.2.4 и функцию
1
23
45
6
$mytest = 'test';
function pb_test() {  global $mytest;
  echo $mytest;}
pb_test ();
В таком виде ничего не работает, но стоит объявить переменную глобально заранее - как все встает на свои места
1
23
45
6
global $mytest; $mytest = 'test';
function pb_test() {  global $mytest;
  echo $mytest;}
pb_test ();
Причину такого поведения не нашел, зафиксирована только на ветке 1.5, на 1.0 либо за пределами движка все работает как и надо. Если кто пояснит идиоту - почему так - буду очень признателен ))
632
2009 18 февраля

Plugin "Content Design Div" - !J1.5

Написан простейший плагин, позволяющий в материале оформлять блоки текста произвольным образом. Достаточно установить плагин и опубликовать, после чего в материале обрамить тегами нужный текст:

1
{cdesign}Ваше содержимое здесь{/cdesign}

Внимание - html форматирование в данном блоке работать не будет. Стили оформления по умолчанию заложены в файле plugins\content\pb_content_design.php. При желании можно усложнить форматирование редактированием функции pb_content_design_replacer все в том же файле

Обновления версии 1.1:

  • версия 1.1 позволяет создавать до 9 стилизованных блоков, для этого необходимо указать параметр style1-style9: {cdesign style1}{/cdesign}, общий вид стилей СSS в таком случае становится .pb_content_design_style1 -> .pb_content_design_style9 (в плагине описаны только первые три)
  • добавлен плагин pb_content_design_btn кнопки в редактор, по умолчанию вставляет теги с параметром style1

Скриншот работы:

Plugin Content Design Div - !Joomla 1.5 Скачать Content Design Div 1.1
Скачать Content Design Div Button (кнопка для редактора)
626
2009 17 февраля

Windows XP SP2 && denver: SSL conflict

Windows XP SP2 && denver: SSL conflict Проблема: Windows XP SP2 + Denver + отсутствие подключения к сети (сетевая карта как бы есть, но реально интернет не подключен), после запуска денвера в логах apache ошибки типа:
1
[warn] Init: SSL server IP/port conflict: localsite.ru:443 (Z:/usr/local/apache/conf/vhosts.conf:452) vs. localsite.ru:443 (Z:/usr/local/apache/conf/vhosts.conf:475)
Соответственно localhost работает, прочие пользовательские узлы не пингуются и не отзываются в браузере (при этом в файлике hosts все записи прописываются относительно 127.0.0.1 Решение: в службах системы включаем DNS-клиент (как вариант еще может понадобится дать сетевой карте произвольный IP), никакие другие манипуляции мне не помогли (рекомендовали еще поставить виртуальную сетевую от microsoft, но это уж как то слишком через одно место)
702
2009 04 февраля

Модальные всплывающие окна в админке !J1.5

Запись скорее для себя, дабы не забыть. Подключаем в админке !Joomla 1.5 (да можно и на фронтенде) всплывающие окна с эффектом (работает на mootools и адаптированном скрипте SqueezeBox)
1
23
45
67
89
1011
1213
14
$header .= "
<script type=\"text/javascript\">window.addEvent('domready', function() {
SqueezeBox.initialize({});        $$('a.modal').each(function(el) {
                el.addEvent('click', function(e) {                new Event(e).stop();
                SqueezeBox.fromElement(el);                });
        });});
</script>";$header .= '<link rel="stylesheet" href="/media/system/css/modal.css" type="text/css" />';
$mainframe->addCustomHeadTag($header);
И оформляем ссылку
1
<a class="modal" rel="{handler: 'iframe', size: {x: 650, y: 375}}" href="MyLink" title="Link">Link</a>

Откомменченное