Ха. За все надо платить. Я все никак не мог понять - как так легко можно включить RSComments куда угодно? В смысле, почему все так не делают, а пишутся какие-то плагины-дополнения, да еще и минимум по 6 евро за четыре строки кода? Оказалось все проще, господа. Механизм дебилен и порочен: когда мы подгружаем комментарии под компонентом, он сравнивает ID элемента и название компонента. Все работает, по крайней мере, в тех местах, куда я его пихал. А вот обратная ссылка... Например, когда мы открываем список последних комментов пользователя... Откуда она формируется? Ведь помимо названия компонента и ID элемента есть еще ряд параметров, не задав которые, нас выкинет на главную страницу компонента. Оказывается, ленивые румыны просто в момент добавления (изменения) комментария берут URL, делают ему base64 кодирование и тупо сохраняют в отдельное поле в БД. Кто не понял - переименовал админ алиас у пункта меню - и все, комменты недоступны. Два варианта: либо вручную кодировать-декодировать адреса, либо, для менее продвинутых, открываем статью (элемент компонента) в котором есть комментарий, открываем комментарий для редактирования и сохраняем его. URL перепишется.

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

Подробнее

Эта статья давным-давно уже висит на сайте joomlapolis, каждый раз ее приходится искать по полчаса, решил перетащить себе и перевести. Если коротко - то это возможности плагина CB, который значительно расширяет потенциал Joomla. В частности, очень рекомендую модуль CB Content, который является сильно продвинутой версией стандартного модуля HTML от Joomla. Итак:

 Стандартный способ показать значение поля Community Builder - это с помощью квадратных скобок:
[FIELD_NAME]

Пользователь с логином [username] живет в [cb_citystate] и звать его: [name].

"Сырой" вывод значения поля - удаляет HTML (то же, что и выше, но поддерживает параметры)
[cb:userdata field="FIELD_NAME" /]

Юзер с логином [cb:userdata field="username" /] живет в [cb:userdata field="cb_citystate" /] и зовут его: [cb:userdata field="name" /].

Значение поля с HTML
[cb:userfield field="FIELD_NAME" /]

Новые параметры, которые можно применять в блоках [IF].
user - userid, #me, #displayed, #displayedOrMe
usertype
user_id - myid, ##
username

Полный набор параметров:
user
default - fields only
output - fields and tabs only ('html', 'xml', 'json', 'php', 'csvheader', 'csv', 'rss', 'fieldslist', 'htmledit')
formatting - fields and tabs only ('tr', 'td', 'div' (fields only), 'divs' (tabs only), 'span', 'none', 'table')
reason - fields and tabs only ('profile', 'register', 'list', 'edit', 'search')
list - userlist URL only

[cb:userdata field="FIELD_NAME" user="REPLACEMENT" /]

Юзер с

Подробнее

Я уже где-то жаловался на то, что RSFeedback не имеет нормального модуля добавления отзыва "слёту", без сомнительных pop-up или отсылки на главную страницу. Полноценный модуль не то, чтобы совсем уж лень писать, но раз уж есть RSFormsPro - то почему бы не воспользоваться им?

Итак, создаем форму. Самую что ни на есть обычную. В которой будет три поля и одна кнопка. Это выпадающий список с категориями (назову его q_cat), текстовая строка с заголовком (q_title) и текстовое поле с описанием вопроса (q_des). Список категорий мы будем получать динамически прямо из базы данных. Для этого в поле "элементы" выпадающего списка вставим следующее:

 

//<code>
//Инициализируем пустой массив
$items = array();

$db = JFactory::getDbo(); //Инициализируем соединение с БД
$items[] = "|Выберите[c]"; //Это у нас такой первый элемент
 
// Делаем выборку категорий и сохраняем в $results
$db->setQuery("SELECT id, name FROM #__rsfeedback_categories");
$results = $db->loadObjectList();
 //А теперь делаем "правильный" элемент, который для <select> выглядит как Значение|выводимая метка
foreach ($results as $result) {
  $value = $result->id;
  $label = $result->name;
  $items[] = $value.'|'.$label;
}
 //каждый элемент должен быть с новой строки, поэтому делаем вот так
$items = implode("\n", $items);
//ну и вот он вывод прямо в поле "элементы"
return $items;
//</code>

 

Не

Подробнее

Меня почему-то DDOSят. Хостер - красава, вроде выдержал, хотя и с трудом: средняя нагрузка по 500 запросов в минуту. Пока это не уляжется и я не разберусь - главная страница будет несколько попроще, заодно проверим нагрузку :)

Пользуйтесь меню, все статьи на месте.

Неожиданно для себя решил написать такое сравнение. На западе wix рекламируются, словно бешеный - мол, все бегом делать у нас сайты. Откровенно говоря, если вспомнить, что та же Joomla сама по себе тоже как бы бесплатна но для полноценного использования нужен хостинг - то первое же сравнение это лишь сравнение хостинговых планов. За 375 рублей на wix.com в месяц можно получить 10 Гб на жестком диске с безлимитным трафиком. За те же деньги можно получить самые разные условия хостинга, но 10Гб это явно минимум, на который можно расчитывать. Но все относительно, поэтому давайте поговорим о ценах. За все надо платить, и джумла сама по себе бесплатна весьма относительно. То есть, она крута, но если хочешь немного волшебства - заплати деньгами или временем.

Средний комплект софта на Joomla обходится примерно в 10 тыс рублей, если считать все лицензии - сюда я посчитал систему комментариев, каталог, интернет-магазин, шаблон и до кучи конструктор форм. Плюс-минус. Я молчу о том, что все это - софт по лицензии GPL (ну, вы поняли), что есть бесплатные аналоги, что эти скрипты можно потом использовать на других сайтах, что есть выбор, и что оплаченные деньги подразумевают какую-никакую поддержку. Хрен с ним, на английском. Естественно, что если вдруг вы

Подробнее
  • Опубликовано в:
  • Joomla

Я, понмится, уже жаловался на то, что в RSBlog нет нормального модуля вывода последних записей "по-красивее". На самом деле запись поста в базе данных в RSBlog устроена таким образом, что все хранится сразу в одной строке. Ребята не мудрили сильно. А, значит, нам лишь надо модернизировать стандартный модуль. Меня обуяла лень, так что красивый эффект с вращением-наведением-прочей_свистопляской я делать не буду, просто выведу картинку и поверх нее текст. Также я не стал заморачиваться с отдельными CSS, все inline, но получилось куда как лучше, чем просто голая строчка. Итак:

  1. Создаем папочку templates/ваш_шаблон/html/mod_rsblog_recent и копируем туда default.php из папки tmpl одноименного модуля
  2. Поскольку RSJoomla не стала заморачиваться на оптимизацию кода, то картинка у нас это $item->image
  3. Осознаем, что все картинки rsblog не задумываясь нумерует по порядку и хранит в папке /components/com_rsblog/assets/images/blog
  4. Кто как - я создал символическую ссылку в корень, чтобы писать поменьше
  5. Напихали в default.php всякого зла наподобие
     <?php
    defined('_JEXEC') or die('Restricted access'); ?>
     
    <?php if ($items) { ?>
    <ul class="rsblog-recent-module unstyled<?php echo $params->get('moduleclass_sfx',''); ?>">
        <?php foreach ($items as $item) { ?>
            <li >
    <div style="background-image: url('/blog/<?php echo $item->image;?>');width:auto;min-height:130px;background-size:cover;padding-top:30px;">
                <div style="width:90%;background-color:white;opacity: 0.8;
        filter: alpha(Opacity=80);box-shadow: 2px 2px 5px 2px rgba(0,0,0, .2);padding:5px;">
    <a style="color:#000;display:block;"
Подробнее

Одна из причин, почему я выбрал для себя Community Builder - это его простота в плане написания плагинов. Я уже хвастался где-то, что есть плагин для отображения записей Mosets Tree в Community Builder за 25 евро? Там только один SQL запрос, между нами говоря, и 10 строк кода. Но сейчас не об этом :)

Плагины для Community Builder бывают разные, и творить что-то особенное пока не входит в мои планы. Я лишь хочу вывести последние 10 записей в RSBlog, которые сделал человек, чей профиль мы смотрим. Такие простые плагины, работающие на вывод информации, содержат всего два файла - PHP код и конфигурационный XML файл.

Подробнее

RSBlog - один из лучших компонентов RSJoomla. Как всегда, с наивными косяками, но вызывающий вполне сильное привыкание как простой и надежный способ постить статьи из фронтэнда. Я пробовал разные подобные вещи, включая EasyBlog, но баланс между легкость и полезностью для меня идеален только здесь. В частности, этот сайт сделан на основе этого компонента. Его стоит купить так же и потому, что с ним в комплекте идет RSComments, навсегда решивший для меня, чем комментировать в Joomla.

Для начала замечу, что Joomla, как система управления контентом уже сейчас достигла очень многого, и не за горами тот день, когда выбор окончательно окажется за com_articles, но пока что отсутствие некоторых функций, таких, как возможность публиковать статью в нескольких категориях заставляют искать альтернативы.

Итак, что полезного и уникального в RSBlog:

  • приятная (на мой взгляд) форма добавления статей с лицевой части сайта. Использует редактор, выбранной в Joomla, другими словами - ставь JCK и будет пользователю и личная папочка, и drag-n-drop и прочие радости.
  • настройка прав на основе групп пользователей, в RSBlog. Есть ограничение по категориям, можно назначать модераторов, можно разрешать редактирование чужих статей. Группы RSBlog создаются как на основе групп Joomla, так и можно вручную добавлять пользователей. Это, кстати, стандартная для всех компонентов RSJoomla фишка.
  • каждая
Подробнее

Долгая история о том, почему я все-таки остановился на Virtuemart, когда-нибудь напишу. Сегодня я использую совместно с ним компонент мультивендорности VMVendor, и я заметил, что в письме, которое отходит пользователю, в "подвале" указано вроде бы верное название вендора, но ссылка ведет на главную страницу компонента. Мне вот почему-то захотелось, чтобы по щелчку на названии магазина вендора открывался его профиль. Покурив бамбук с французскими друзьями из Nordmograph мы пришли примерно к такому коду:

$app = JFactory::getApplication();
$lang = JFactory::getLanguage();
$db = JFactory::getDBO();
$q = "SELECT `id` FROM `#__menu` WHERE `link`='index.php?option=com_vmvendor&view=vendorprofile'
AND `type`='component' AND ( language ='".$lang->getTag()."' OR language='*')
AND published='1' AND access='1' ";
$db->setQuery($q);
$itemid = $db->loadResult();

$vendor_userid = VirtuemartModelVendor::getUserIdByVendorId($this->vendor->virtuemart_vendor_id);
$link = JRoute::_ ( 'index.php?option=com_vmvendor&view=vendorprofile&userid='.$vendor_userid.'&Itemid='.$itemid ,true,-1);

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

Осталось добавить, что это мы сделали оверрайд страницы com_virtuemart/invoice/mail_html_footer.php

Скажу заранее - RSFirewall не является лучшим средством защиты. Положа руку на сердце - Akeba Admin Tools PRO за 40 евро гораздо интереснее (например, может настраивать .htaccess, чего не может RSFireswall). Но лично мне функций RSFirewall мне хватает за глаза и я не помню, чтобы кто-то взламывал сайт с этим компонентом. Итак, что он может:

  1. Сканировать папку вашего сайта на наличие барахла. Функция постоянно дорабатывается, так, на сегодняшний день RSFirewall анализирует файлы ядра Joomla на предмет их соответствия исходнику (помогло выявить то, что не увидели другие антивирусы) и тут же заменить их оригиналом либо запомнить, что изменение безопасно (специально для хардкодеров), смотрит права папок, создаваемых скриптами, проверяет права самих файлов и папок на безопасность, ну и находит непосредственно инфицированный код. Находит не все, но, как я писал в другой статье про безопасность, если нашли, что вас атаковали - заменяйте сразу весь код на сайте без размышлений на архивный. 
  2.  Выполняет проверку, ремонт и оптимизацию таблиц в базе данных. Не особо понимаю, как  это связано с защитой сайта от взлома, но функция все равно полезная
  3. Осуществляет IP фильтрацию доступа на сайт - есть черные списки (которые даже на главную страницу попасть не смогут) так и белые (которые не будут автоматически заблокированы). Можно блокировать
Подробнее

Защита сайта - дело хоть и хлопотное, но не трудное и не требующее особых знаний. Я постараюсь подойти к этому вопросу с такой стороны, чтобы у читателя не осталось сомнений насчет методов.

К несчастью, как показывает практика - обеспечить стопроцентную защиту от взлома так же трудно, как гарантировать, что на компьютер не попадет троян или вирус: все дают обещания о 100% защите и, в итоге, только здравый смысл гарантирует безопасность. На самом деле сама по себе Joomla - одна из самых "неломаемых" систем, в то же время это справедливо только в том случае, если она у вас на выделенном сервере и не установлено никаких сторонних компонентов. Нужен пример? буквально вчера StackIdeas, один из трех крупнейших игроков в мире компонентов социальных сетей обьявила о дыре в безопасности настолько серьезной, что (кстати, молодцы) выложили патч даже для тех, у кого уже закончилась подписка. Знаете ли, за полгода это уже четвертая или пятая дыра у них. В компоненте за сотню баксов. Второй пример - хостинг Jino.Ru. Вы не знали, но код сайта там исполняется с правами на весь сервер, говоря по-простому. Т.е., перейду к выводам, вы можете иметь сайт из одной HTML странички и вас все равно взломают - сосед по хостингу. Тут

Подробнее

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

Подробнее

Итак, свершилось! Я победил RSFiles, теперь он может сохранять файлы с русскими именами. Создавать папки с русскими именами. Ну и главное - можно накидать гору русскоименного барахла по FTP и все нормально отобразится. Короче, наслаждайтесь. Релиз прилагается. Правда, там только компонент, кому нужны модули и прочая радость - уважьте производителя, все же они поработали, купите полный релиз.

Подробнее

Я тут начал понимать, зачем может взрослому человеку пригодиться RSFiles. У них не реализован (напрямую) функционал "показать файлы пользователя". Т.е. файл сохранился, есть запись в базе о его владельце - все, что надо, но интерфейса нет. Неожиданная мысль: в Community Builder "встроенная" поддержка файлов выражена чудовищно плохо - кто видел CB Gallery, тот поймет. Плагина для Community Builder RSJoomla еще не писала и вряд ли напишет, НО кто мешает написать самостоятельно? Тогда мы получаем весь функционал RSFiles но ограниченный пользователем Community Builder. Т.е. у каждого будет возможность создавать файлы и папки. Осталось подумать, как сделать так, чтобы пользователи не сохраняли все в одну папку.... Чувствую, что где-то тут посредником должен RSForms всплыть :)) Ладно, вернемся к этому позже.

Помните, писал, что люблю RSComments? И правда, шикарный компонент для разработчика. По сути, я продолжаю допиливать RSFiles до состояния "вот теперь мне не жалко денег за него", а для этого неплохо было бы включить комментарии к файлам. "Из коробки" RSFiles ничего такого не умеет. Однако, когда он видит какой бы то ни было файл или папку, он тут же автоматом создает соответствующую запись в базе данных. Ну, ACL там и всякое такое. Что круто. А RSComments мало того, что непривередлив по части, что и как комментировать благодаря своей структуре, так еще и имеет очень удобный тэг, который можно воткнуть прямо в код шаблона. Поскольку я раньше уже писал о файле вывода RSFiles (в статье о том, как правильно редактировать файлы Joomla, чтобы не было потом мучительно больно), то скажу только саму волшебную строчку, которая включит комментарии RSComments:

Подробнее

Задача проста: пользователь оставляет отзыв с помощью RSFeedback и мне хочется, чтобы вместо логина там красовалось имя и ссылка на профиль в Community Builder. Методом научного тыка было определено оптимальное решение, которое, к сожалению, не ограничилось переписыванием tmpl-файлов в папку шаблона (в основном потому, что в оригинале выводится только логин, только хардкор).

Подробнее

Проблема вполне очевидна: если у вас в RSFeedback стоит по умолчанию встроенная система комментариев, то после выбора определенного статуса комментирование станет недоступно. Ибо нефиг - все, тема закрыта. В случае, если выбрана система комментариев RSComments возможность комментирования остается. Это немного обескураживает - ну, нельзя больше добавлять голоса, ладно. А срач как был, так и остался, тред аккуратным не сделаешь, только если вручную не закроешь комментирование. Поскольку разработчики, как всегда, не торопятся вставить пару лишних строчек кода, я решил немного похардкодить для себя. Итак:

Подробнее

RSComments - безусловно, один из лучших компонентов от RSJoomla.

Совместима со следующими расширениями:

  • естественно, со всем набором от RSJoomla (включая интересную фишку - комментирование записей в RSForms)
  • есть плагин для Community Builder
  • поддержка аватаров от Community Builder и Kunena Forum
  • ссылка на профиль Community Builder
  • стандартный контент Joomla....
  • ...и очень удобный плагин, позволяющий разработчику интегрировать RSComments хоть с Папой Римским 
Подробнее

На примере все того же RSFiles расскажу, как можно легко, красиво и - БЕЗБОЛЕЗНЕННО - поменять вывод в Joomla. Объясню суть в двух картинках:
стандартный вывод компонента - куча всего, что нам не нужно показывать конечному пользователю и гуглу


И как хотелось бы - название файла поменьше, сразу под ним описание и ну нафиг панель:

Подробнее

На самом деле заставить "понимать" русские буквы, а, точнее, имена файлов в формате UTF-8 здесь несложно. К сожалению, для этого придется провести замену примерно в 15 файлах компонента, что потеряется при следующем обновлении. Я написал об этом в службу техподдержки, и если они не ответят - видимо я применю этот грязный хак на своем сайте, перепакую компонент и выложу сюда, своим подписчикам. GPL лицензия позволяет, кстати. 
Итак, что надо: открываем какой-нибудь файл "по-главнее" в этом компоненте, добавляем туда следующую функцию:

 function mb_basename($path)
  {
    $separator = " qq ";
    $path = preg_replace("/[^ ]/u", $separator."\$0".$separator, $path);
    $base = basename($path);
    $base = str_replace($separator, "", $base);
    return $base;
  }

После чего делаем поиск с автозаменой во всех файлах компонента, меняя слово basename на mb_basename. И система резко начинает понимать русские буквы - как при загрузке через сайт, так и в случае ручного закидывания барахла с русскими названиями в папку компонента.



­