×
Ruby on Rails: постинг твитов через Twitter API (04 нояб 2017)

Практикуемся в Ruby on Rails.

Вопрос Хитрости Joomla

Больше
6 года 10 мес. назад #1 от Aleksej
Aleksej создал эту тему: Хитрости Joomla
Снятие блокировки

Joomla имеет привычку блокировать элементы при редактировании. Делается это для исключения коллизий. Но если с сайтом работает неколько пользователей, то это может доставлять некоторые неудобства. Например, пользователь1 начал редактировать статью и при этом закрыл браузер или перешел на другую страницу не сохранив изменения и не нажав кнопку "Отмена". В результате пользователь2 не может редактировать эту статью. Для снятия блокировки надо иметь права администратора и воспользоваться меню "Инструменты" -> "Сброс блокировок".

Работа с файлами


Часто встречается, что для повышения безопастности сайта - настраивают права доступа таким образом, что из скриптов PHP невозможно модифицировать файлы, находящиеся в системных папках сервера. При этом существует возможность изменять их через FTP. В Joomla существует возможность работать с файловой системой не напрямую (через встроенные функции), а через класс JFile. Этот класс является оберткой для системных функций, а также может работать через протокол FTP. Естественно, протокол FTP должен быть разрешен в системных настройках и должен быть указан адрес хоста, логин и пароль для входа.

Для использования класса JFile нужно подключить требуемый файл.
jimport('joomla.filesystem.file');

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

Upload файла

Для получения информации о загруженом файле используем стандартный метод
$file = JRequest::getVar( 'file', '', 'files', 'array' );

Первый параметр - это имя поля ввода. В результате получаем массив со стандартными полями, как при использовании $_FILES

Дальше - проверяем файл и сохраняем его. В переменной $filepath строка с именем файла; куда именно нужно сохранить загруженный файл.
$uploaded=true;
$err="";
if (!MediaHelper::canUpload( $file, $err )) {
	$uploaded=false;
} else 
{
	if (JFile::upload($file['tmp_name'], $filepath))
	{
		$uploaded=true;
	} else 
	{
		$uploaded=false;
		$err='Can\'t save file '.$filepath;
	}	
}

Для проверки файла используется класс MediaHelper Он входит в состав стандартного компонента Joomla media. Ниже продемонстрирован пример подключения нужного файла в контроллер админской компоненты:
require_once( dirname(dirname(__FILE__)).DS.'com_media'.DS.'helpers'.DS.'media.php' );

Вход без знания пароля

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

Находим файл /plugins/authentication/joomla.php. Открываем его на редактирование и находим строку
if ($crypt == $testcrypt)

и делаем так, чтобы условие всегда было истиным. Например, вот так
if (1||$crypt == $testcrypt)

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

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
6 года 10 мес. назад - 6 года 10 мес. назад #2 от Aleksej
Aleksej ответил в теме Re: Хитрости Joomla
Продолжаем тему. :)

Рассмотрим, как сделать:
  1. отображения модуля только на определённых страницах;
  2. отображения модуля по IP-адресу или диапазону адресов;
  3. отображение модуля только определённому типу пользователей;
  4. отображение модуля при полном просмотре текста или новости.
Все эти хитрости мы осуществляем с помощью кусочка кода, внедрённого в шаблон сайта. Итак, начнем:

Отображение модуля только на определённых страницах

Чтобы отображать модуль только на определённых страницах, потребуется вставить следующий код:
<?php
  if (($option == '') || ($option == 'com_frontpage')) {
    mosLoadModules ( 'user1' );
  }
?>

В этом примере мы выводим позицию модулей user1 только на главной странице.

Отображения модуля по IP-адресу или диапазону адресов

Если нужно, чтобы модули отображались только для определённого IP-адреса или диапазона адресов - используем следующий код:
<?php
  if ($_SERVER['REMOTE_ADDR'] == '127.0.0.1') {
    mosLoadModules ( 'user1' );
  }
?>

Итак, для пользователя с IP-адресом 127.0.0.1 позиция модулей user1 будет отображена, а для остальных нет.

Отображение модуля при полном просмотре текста или новости

Для того, чтобы модули отображались лишь при полном просмотре материала, делаем следующее:
<?php
  if (($option == 'com_content') && ($task == 'view')) {
    mosLoadModules ( 'user1' );
  }
?>

Обратите внимание на переменную $task , с ее помощью мы осуществляем проверку.

Отображение модуля только определённому типу пользователей

Выводим модули только для определённых пользователей:
<?php
  if (!$my->id) {
    mosLoadModules ( 'user1' );
  } else {
    mosLoadModules ( 'user2' );
  }
?>

Если на сайт заходит незарегистрированный или неавторизованный пользователь, то в шаблоне загрузятся модули, опубликованные в области user1, а если зарегистрированный — загрузится позиция user2.

Также возможно отобразить модули для определённых групп пользователей:
<?php
  if ($my->usertype == 'Author') {
    mosLoadModules ( 'user1' );
  }
?>
Последнее редактирование: 6 года 10 мес. назад от Aleksej.
Спасибо сказали: vitas1978

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
5 года 5 мес. назад #3 от Damian
Damian ответил в теме Re: Хитрости Joomla
Добрый день.
<?php
  if (!$my->id) {
    mosLoadModules ( 'user1' );
  } else {
    mosLoadModules ( 'user2' );
  }
?>
Что-то не работает. Для Joomla 2.5 точно так же прописывается?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
5 года 5 мес. назад #4 от serge
serge ответил в теме Re: Хитрости Joomla
Вряд ли. Очень старая ветка форума, все изменилось.

А я смогу! - А поглядим! - А я упрямый!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.