Добрый день, друзья. Сегодня очередная статья для разработчиков расширений Joomla, и я вкратце расскажу в ней о том, как решить задачу подключения определенных ресурсов в зависимости от текущего языка Вашего сайта. Подразумевается, что сайт поддерживает более одного языка. Управление многоязыковой средой для такого сайта может осуществляться каким-либо популярным расширением. Например, я использую замечательный и известный компонент JoomFish для этих целей.
Речь в этой заметке вот о чем: бывает ситуация, когда в коде некоторого плагина/модуля/компонента необходимо определять текущий язык сайта. А далее, в зависимости от текущего языка сайта, подключать определенный ресурс, соответствующий этому языку. Предположим, мы активно используем jQuery на сраницах нашего Joomla-сайта. И у нас возникла необходимость выводить на JavaScript сообщения на каждом из поддерживаемых сайтом языке.
Доброго времени суток, друзья. В сегодняшней статьей я расскажу о том, как создать свою позицию в шаблоне для модуля Joomla. Тема не сложная, зато будет полезна всем тем, кто использует готовый шаблон Joomla, но текущее количество и/или расположение модулей в нем не устраивает.
Итак, что нам нужно:
Открыть сайт в браузере и определить место в текущем шаблоне сайта, куда мы хотим добавлять модули.
Определить с помощью специальных инструментов разработчика - "ближайшее окружение" нашей будущей позиции, т.е. какие-нибудь элементы HTML-разметки, которые расположены близко к месту предполагаемого добавления новой позиции. Это поможет нам найти нужное место в коде шаблона, куда добавить код для новой позиции.
Изменить индексный файл шаблона - обычно это файл index.php в корневом каталоге шаблона
Изменить специальный файл с названием templateDetails.xml, который содержит описание всех доступных позиций в шаблоне Joomla
Иногда при разработке для Joomla нужно получить ID для записи, вставляемой в определенную таблицу. Например, чтобы потом вставить во вторую таблицу запись, ссылающуюся на запись в первой таблице (т.е. использовать значение ID из 1-й таблицы в качестве внешнего ключа во 2-й таблице). Для этого существует специальный метод - insertid(). Он доступен при получении ссылки на объект для работы с базой данных через вызов JFactory::getDBO(). Сейчас я покажу, как это делается на практике:
При разработке расширений для Joomla Вы можете столкнуться с необходимостью проверки, является ли залогиненный в джумла пользователь администратором. Недавно передо мной встала именно такая задача. И в сегодняшнем кратком очерке я расскажу, как проверить пользователя на администратора для версии Joomla 1.5. Основным классом, который нам понадобится, будет класс фреймворка джумлы JFactory. С его помощью мы получим сначала текущего пользователя, а затем специальный объект - JAuthorization. Текущего пользователя получаем с помощью вызова:
Ниже приведу несколько кусков кода для решения задач, которые часто встречаются при разработке для Joomla.
Каждый сниппет снабжен комментариями краткими комментариями.
1. Подключение ресурсов к документу
// Получение документа
$doc = & JFactory::getDocument();
// Подключение к документу CSS-файла
$doc->addStylesheet("<a href="http://myexternalsite.com/css/myexternalcss.css">http://myexternalsite.com/css/myexternalcss.css</a>");
// Подключение внешнего JavaScript-файла
$doc->addScript("<a href="http://myexternalsite.com/js/myexternalscript.js">http://myexternalsite.com/js/myexternalscript.js</a>");
// Подключение к документу встроенного кода JavaScript.
// Строка, которую мы помещаем в addScriptDeclaration, будет автоматически обрамлена
// тегами <script> и </script>
$doc->addScriptDeclaration("
var msgHelloWorld = \"Hello, World!\";
alert (msgHelloWorld);
");
2. Получение значений переменных из запроса
// Получение значения переменной page GET-запроса с преобразованием к целому числу
// Если переменная в запросе не передавалась - присвоится значение по умолчанию 1
$page = JRequest::getInt('page', 1, 'get');
// Получение значения переменной task POST-запроса
// getCmd фильтрует значения, оставляя только символы из диапазона [A-Za-z0-9.-_]
$task = JRequest::getCmd('task', 'doDefaultThing', 'post');
3. Работа с базой данных
// Получение объекта бд.
$db = & JFactory::getDBO();
// Получение всех пользователей из таблицы jos_users
$db->setQuery("SELECT * FROM #__users");
// Получение результатов запроса в виде массива объектов.
// Каждый объект содержит аттрибуты с названием полей в базе данных
$listUsers = $db->loadObjectList();
// Печать на экран всех пользоваталей с их адресами E-mail
if (!empty($listUsers)) {
foreach ($listUsers as $user) {
echo "User: " . $user->username . ", E-mail: " . $user->email;
}
}
4. Получение текущего пользователя
$user = & JFactory::getUser();
if ($user->guest) {
// Пользователь не зашел на сайт, т.е. гость.
} else {
// Пользователь зашел на сайт
}
5. Получение текущей сессии JSession
$sess = & JFactory::getSession();
$username = $sess->get('username');
if (empty($username)) $username = "Гость";
// Сохранить в сессии переменную
$sess->set('username', $username);
// В сессии можно также хранить массивы:
$arrBooks = array();
$arrBooks['books'][] = array('title' => 'Война и мир', 'pages' => 1173 );
$arrBooks['books'][] = array('title' => 'Преступление и наказание', 'pages' => 560 );
$arrBooks['books_number'] = 2;
// Сохранили массив в сессии
$session->set('books', $arrBooks);
// ... выполняем какие-то действия
// Получили массив $arrBooks из сессии
$session->get('books');
6. Отправка электронной почты пользователю с помощью JUtility::sendMail
// Получение ID юзера из запроса
$userid = JRequest::getInt('userid', 0, 'get');
// Получение объекта бд.
$db = & JFactory::getDBO();
if ($userid > 0) {
// Получение пользователя по ID из таблицы jos_users
$db->setQuery("SELECT * FROM #__users WHERE id = " . $db->Quote($userid, true) );
// получаем результаты запроса в виде объекта (будет нулевой, если пользователь не найден)
$userObject = $db->loadObject();
if (!empty($userObject) && !empty($userObject->email)) {
$mail_topic = "Это тема письма";
$mail_text = "<p>Привет, " . $userObject->username . "! Это тестовое сообщение</p>";
// Отправляем письмо. Последний параметр - это режим отправки письма. Если true, то письмо будет HTML-документом,
// иначе обычный текст.
JUtility::sendMail("yourmail(0)yourdomain.ru", "Allineed.Ru", $userObject->email, $mail_topic, $mail_text, true);
} else {
// Пользователь не найден, либо у него не указан email - ошибка...
}
} else {
// ID пользователя <= 0 - это ошибка...
}
Ниже приведу несколько кусков кода для решения задач, которые часто встречаются при разработке для Joomla. Каждый сниппет снабжен комментариями краткими комментариями.