All for Joomla!
Main Articles Joomla Хаки и дополнения

Хаки и дополнения

  1. Как мне включить в RSS картинки. В статье они есть, а в стандартном компоненте RSS они вырезаются
  2. Как в компоненте com_weblinks сделать, что бы выдавалась прямая ссылка
  3. Как сделать так, что бы Joomla работала на двух хостах(доменах) одновременно. Т.е. например, в локальной сети по адресу 10.0.0.15 и из интернета сайт-фирмы.ру. При том, что оба адреса заведены на одну машину.
  4. Как сделать так, что бы на одной странице одновременно отображались два компонента
  5. Как увеличить длину заголовка в статье
  6. Как включить в RSS-фид полные тексты новостей, а не только их заголовки
  7. Как можно сделать два сайта на Joomla, использующие одну и ту же базу данных или использующие одни и те же файлы
  8. Как создать виртуальную страницу, доступную по определенном адресу в общем дизайне Joomla (http:/ /сайт.ру/super_page)
  9. Как запретить кэширование для определенной статьи
  10. Я поставил много компонентов, а в списке компонентов в админ-меню показывается урезанное их количество, а дальше написано "More components...". Как вывести все компоненты.
  11. Как установить копию компонента
  12. Как сделать так, что бы на одной позиции случайным образом показывался один из модулей, назначенных на нее
  13. Я считаю, что переименовав папку /adminisrator/ я сделаю свой сайт безопаснее
1. Как мне включить в RSS картинки. В статье они есть, а в стандартном компоненте RSS они вырезаются
Есть предложение в файле /includes/joomla.php в функции cleanText заменить строчку

$text = strip_tags( $text );

на

$text = strip_tags( $text, "" );

Данный хак предназначен только для картинок, которые вставляются как нормальные изображения. Для изображений, вставляемых мамботом {mosimage} данный хак не сработает.

2. Как в компоненте com_weblinks сделать, что бы выдавалась прямая ссылка
В weblinks.html.php надо заменить строку:

$link = sefRelToAbs( 'index.php?option=com_weblinks&task=view&catid='. $catid .'&id='. $row->id );

на

$link = $row->url;

3. Как сделать так, что бы Joomla работала на двух хостах(доменах) одновременно. Т.е. например, в локальной сети по адресу 10.0.0.15 и из интернета сайт-фирмы.ру. При том, что оба адреса заведены на одну машину.
Во-первых вся соль проблемы заключается в том, что Joomla выдает все картинки и CSS-файлы (их пути в шаблоне) относительно своей переменной $mosConfig_live_site - базового адреса сайта, вводимого при установке. И если кто-то пытается обратиться к ней по-другому адресу, то ничего в логике ее работы не меняется - базовый адрес берется из файла кофигурации. Например если в конфигурации прописано, что Joomla находится на localhost, то обращение из локальной сети, пусть даже к правильно настроенному апачу слушающему адрес 192.168.0.1 ничего в ней не изменит - src у картинок все-равно будет начинаться с "localhost", который для других машин будет уже своим localhost'ом. Фокус решений для подобных случаев - это подмена переменной $mosConfig_live_site для запрашиваемого хоста, что бы все функции могли выдавать правильные ссылки и уже водить пользователя либо по-одному, либо по-другому виртуальному сайту (выдавать правильные базовые пути к картинкам и базовые пути к адресам). Есть мамбот Auto live site который может это автоматизировать. Если он вас чем-то не устроит, то в принципе его можно повторить, для этого в configuration.php на месте определения $mosConfig_live_site надо написать ваш код. Нечто вроде:

if ($_SERVER['HTTP_HOST']=='хост1.ру') $mosConfig_live_site = 'хост1.ру';
else $mosConfig_live_site = 'хост2.ру';

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

4. Как сделать так, что бы на одной странице одновременно отображались два компонента
Сразу скажу - не все так просто. Компонент он ведь не модуль. Поэтому во-первых стоит поискать альтернативу, т.е. наверняка к популярному компоненту идут модули, которые могут повторить его функционал. Если ничего такого нет тогда этот вариант. Можно сделать как модуль, а можно по идее и в шаблон вставить. Идея такова - вызов компонента через index2.php (что и почему - читаем фак полностью). Т.е. можно сделать iframe с src='index2.php?option=com_компонент&no_html=1' на нужном вам месте вставки второго компонента. И он там будет отображен. Другое дело, что полностью обеспечить фукционал вряд ли удастся. Но тем не менее это выход.
Либо использовать конструкцию:

mosLoadComponent('com_mycomp');

Но, если компонент будет выполнен таким образом, то надо понимать, что он знать не знает о ваших манипуляциях и будет работать согласно своим $option и $task.

5. Как увеличить длину заголовка в статье

Надо выполнить две следующие команды в phpMyAdmin (там есть специальная страница для выполнения SQL-запросов), только надо заменить ###_ на свой реальный префикс таблиц. Максимально возможное число - 255. В примере использовано 200.

ALTER TABLE `###_content` CHANGE `title_alias` `title_alias` VARCHAR(200) NOT NULL;
ALTER TABLE `###_content` CHANGE `title` `title` VARCHAR( 200 ) NOT NULL;

6. Как включить в RSS-фид полные тексты новостей, а не только их заголовки
Для этого в файле /components/com_rss/rss.php, надо заменить

$item_description = $row->introtext;

на

$item_description = $row->fulltext;

7. Как можно сделать два сайта на Joomla, использующие одну и ту же базу данных или использующие одни и те же файлы
Что касается использования одной БД - надо прописать в configuration.php для двух движков одну базу, но надо понимать что вы делаете. Ибо ведение сессий для пользователей в таком случае будет весьма проблематично, потому что домены разные. Т.е. записи о входе в таблице #__sessions будут пересекаться (могут пересекаться).

Если хочется использовать одни и те же файлы, не копируя большой дистрибутив, то в принципе можно при помощи команды "ln -s" в линуксе создать символические ссылки на уже существующие файлы и не копировать их для нового сайта.

8. Как создать виртуальную страницу, доступную по определенном адресу в общем дизайне Joomla (http:/ /сайт.ру/super_page)
* Первый способ - использовать какой-либо SEF-компонент, в котором для статичной страницы прописать нужный виртуальный путь. Тут есть минус - этот компонент начнет переделывать все остальные ссылки (и вообще эти компоненты очень прожорливые и требуют много ресурсов для работы).
* Создать алиас такой страницы при помощи mod_rewrite и .htaccess. Для этого надо:
o Создать статичную страницу с нужным вам текстом, узнать ее ID и адрес (не обязательно создавать такую страницу, она уже может существовать и вообще это просто какой-либо компонент, не обязательно com_content)
o Придумать алиас, пускай это будет "super_puper"
o Открыть .htaccess и перед строкой "RewriteCond %{REQUEST_FILENAME} !-f" написать:

RewriteRule ^(super_puper) index.php?option=com_content&task=view&id=12

RewriteCond %{REQUEST_FILENAME} !-f

*
o И теперь, при условии что Joomla стоит по адресу сайт.ру, при открытии ссылки http:/ /сайт.ру/super_puper будет открываться нужная статическая страничка с вашей информацией. Сама ссылка "index.php?option=com_content&task=view&id=12" может быть любой которая вам нужна, главное что бы ссылка не была абсолютной (т.е. с http:/ /...) а относительной (должна начинаться с index.php?...)

9. Как запретить кэширование для определенной статьи
Это может понадобиться, если вы при помощи мамбота rd_addphp вставляете какие-либо скрипты, которые должны каждый раз генерировать случайные числа или случайный текст, независимо от системы кэширования Joomla. Для отключения кэширования определенной стать надо узнать ее ID (в админке, при редактировании взгляните на адресную строку, там будет указано нечто такое "...&id=123..."). Так вот 123 - и будет нашим ID статьи. Нужно, в файле /components/com_content/content.php приблизительно на строке 1600 заменить

$cache->call( 'HTML_content::show', $row, $params, $access, $page );

на

if ($row->id!='123') $cache->call( 'HTML_content::show', $row, $params, $access, $page );
else HTML_content::show($row, $params, $access, $page);

Где 123 - нужный вам ID статьи.

10. Я поставил много компонентов, а в списке компонентов в админ-меню показывается урезанное их количество, а дальше написано "More components...". Как вывести все компоненты.
Надо в файле /administrator/modules/mod_fullmenu.php строку

$topLevelLimit = 19;

заменить на

$topLevelLimit = 199;

11. Как установить копию компонента
Надо сказать, что задача на редкость сложная. Если вы не разбираетесь в том как устроен компонент, то не стоит даже и пытаться. Для тех кто все-так захочет отметим основные моменты:

* В XML-файле переименовать имя компонента в тэге name
* Далее надо переименовать используемые таблицы (во-первых в XML-файле, а во-вторых во всех файлах компонента, везде где используется объект базы данных $database и метод setQuery)
* Все пути в компонентах тоже переименовать. Пути могут быть использованы в ссылках на самого же себя или в именах включаемых файлов. Чаще всего это сводится к поиску подстроки com_имякомпонента и замене ее на новую.

Но данный метод ничего не гарантирует. С простыми такое возможно и пройдет, но вот со сложными - никто ручаться не будет.

12. Как сделать так, что бы на одной позиции случайным образом показывался один из модулей, назначенных на нее
* Вариант 1 - хак фукнции mosLoadModules. В шаблоне месте где необходимо вывести один из N модулей пишем (обратите внимание на третий аргумент):

mosLoadModules ( 'позиция', настройка_показа ,true);

И немного поправляем саму вышеозначенную фукнцию:

function mosLoadModules( $position='left', $style=0, $show_random = false ) {

...

$allModules =& initModules();
if (isset( $GLOBALS['_MOS_MODULES'][$position] )) {
$modules = $GLOBALS['_MOS_MODULES'][$position];
} else {
$modules = array();
}
//дописываем тут

if ($show_random && sizeof($modules)>0) {

$tmp = $modules[rand(0,sizeof($modules)-1)];
$modules = array($tmp);
}

//конец дописки
if (count( $modules ) < 1) {
$style = 0;
}

Мы дописали в нее третий аргумент (который и используется в шаблоне, там где мы написали true) и модифицировали код.

* Вариант два - более безболезненный, мы модифицируем только шаблон. Но более трудозатратный - нам надо создать несколько позиций. Сначала создаем несколько новый позиций модулей, например new1 ... new10. Сохраняем. В нужном месте шаблона, перед вызовом функции mosLoadModules дописываем нужный код:

$rand_num = rand(1,10);//от 1 до 10 - как в имени позиций
mosLoadModules ( 'new'.$rand_num, настройка_показа);

13. Я считаю, что переименовав папку /adminisrator/ я сделаю свой сайт безопаснее
Стандартно такой возможности не предусмотрено. Но фактически можно, организовав поиск по файлам джумлы сделать замену любого вхождения такого слова на ваше - секретное. Иногда потом возможно будут выскакивать ошибки о не возможности доступа к файлам, но зная файл и номер строки их можно будет исправить. Поэтому проблема в принципе разрешима.

Similar material

WYSIWYG редакторы
Я не могу редактировать содержимое в WYSIWYG-редакторе, редактор не работаетУ меня косяк с визульным редактором. Не правильно работает, не правильно отбражается. Глючит по...
Общие вопросы использования функционала
Как сделать что бы пользователи регистрировались без активации аккаунтов. Как не требовать от них обязательного e-mail адреса?Я изменяю настройки в модулях, компонентах,...
Безопасность
Как мне защитить сайт от взломаЧто такое chmod/чмод и права файлов (777, 664 и т.д. )А если меня взломали как мне проанализировать ситуацию, предотвратить такое в...
Хаки и дополнения
Как мне включить в RSS картинки. В статье они есть, а в стандартном компоненте RSS они вырезаютсяКак в компоненте com_weblinks сделать, что бы выдавалась прямая ссылкаКак...
 

Add comment


Security code
Refresh