Соединение к БД Joomla из внешнего файла

👁 23 просмотров

Есть ситуация, когда нужно прочесть из БД Joomla из таблицы какого-то модуля данные, при этом есть необходимость прочесть данные в отдельный файл из которого они загружаются в интерфейс через Ajax запрос посредством JavaScript/jQuery. Ниже приведен код серверной и клиентской части для реализации данного взимодействия.

<?php
define( '_JEXEC', 1); //  This will allow to access file outside of joomla.
//defined( '_JEXEC')  or die( 'Restricted access' );// Use this if you wanna access file only in Joomla.
define( 'DS', DIRECTORY_SEPARATOR );
define('JPATH_BASE', $_SERVER['DOCUMENT_ROOT'] . DS . '');
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
//create application
$mainframe = &JFactory::getApplication('site');

function getField($file_alias){
    // Get a db connection.
    $db = JFactory::getDbo();
    // Create a new query object.
    $query = $db->getQuery(true);
    // Select all records from the user profile table where key begins with "custom.".
    // Order it by the ordering field.
    $query->select($db->quoteName(array('file_id', 'file_title', 'file_alias', 'url_download')));
    $query->from($db->quoteName('#__jdownloads_files'));
    $query->where($db->quoteName('file_alias') . ' LIKE '. $db->quote($file_alias));
    //$query->order('ordering ASC');
    // Reset the query using our newly populated query object.
    $db->setQuery($query);
    // Load the results as a list of stdClass objects (see later for more options on retrieving data).
    $results = $db->loadObjectList();
    return  $results[0];//Данные потом получить в виде свойств объекта ClassName::getFieldDocument($fileName, $userId)->fieldName
}

$arrData = array(
                    "file_alias"=>$_REQUEST['file_alias'], 
                    "url_download"=>getField($_REQUEST['file_alias'])->url_download,
                    "file_id"=>getField($_REQUEST['file_id'])->url_download,
                    "file_title"=>getField($_REQUEST['file_id'])->file_title
                );
echo json_encode($arrData);<span id="mce_marker" data-mce-type="bookmark" data-mce-fragment="1">​</span>
    function readPrices(data){
        var jsonString = $.ajax({
            url: "server.php", 
            data:data,
            dataType:'JSON', 
            async: false,  
            success: function(data){}
         }).responseText;
        return JSON.parse(jsonString);
    };
    //
    var url = "my-url-data";
    var jsonData = readPrices({"file_alias":url});
    console.log(jsonData);

 

How to hide joomla site title for all pages

👁 27 просмотров

Method 1. You can change or hide the site name from admin panel. For this you must go to way «System» -> «Common Settings» -> «Site Name». It is the first field in list of settings. Setting this parameter as one space symbol in field.

Method 2. Another for hide the site name — edit the file configuration of Joomla site. Most Joomla templates display the site name defined in the Joomla configuration file configuration.php. Usually, the site name is set as the domain name for your website.

In order to hide it, you need to delete the domain name and save the configuration with a blank site name. For example, if your domain name is mysite.com, in your configuration.php file you will have this line:

var $sitename = ‘mysite.com’;

To hide the site name, you need to change the above line to:

var $sitename = »;

Method 3. For this method we need know what template is current active. Go to this template folder as «templates»->»YourTemplateFolder»-> «index.php», and comment or remove tag with class .site-title.

 

Работа с базой данных. Добавление, чтение, обновление и удаление данных в таблице модуля Joomla 3.x

👁 35 просмотров

К списку «Проектирование модуля для Joomla 3.x»

Итак, мы уже знаем как создает таблица для модуля в БД MySQL, осталось работать с этой таблицей и еще, в данном посте рассмотрим как взаимодействовать элементами управления модуля с файловой системой, когда мы будем загружать иконку для портфолио, и с таблицей модуля для реализации CRUD(Create, Read, Update, Delete) в таблице.

 

Продолжение следует…

 

Работа за базой данных. Инсталляция и деинсталляция структуры и данных БД из модуля Joomla 3.x

👁 41 просмотров

К списку «Проектирование модуля для Joomla 3.x»

И так, пришло время одного из самых главных частей нашего модуля — базы данных. Joomla может работать со многими БД: MSQL, Oracle, Postgree и т.п. Для нас сейчас интересует БД MySQL, поэтому ориентрируем подачу материала именно на эту систему управления базами данных.

Файловая структура

Как и в предыдущем посте, на данном шаге структура файловой системы тоже претерпит ряд изменений по возрастающей. Добавим 2 файла c расширением *.sql, в которых будет структура и начальные тестовые данные для установки и удаления данных из БД. При установке модуля файл инсталляции будет создавать новую таблицу mod_table_portfolio для нашего модуля, а при удалении модуля файл деинсталляции удалит эту таблицу, что разрешит проблему сохранения системы Joomla в чистоте.

Ниже представлена новая файловая структура модуля, где в корень модуля добавлена новая папка sql, а в ней файлы с конструкциями языка SQL

stage-4-module-file-structure-of-joomla-3

Как видим, добавили 2 файла, mod_portfolio.install.mysql.utf8.sql и mod_portfolio.uninstall.mysql.utf8.sql, которые имеют следующий код в себе

CREATE TABLE IF NOT EXISTS `mod_table_portfolio` (
	`id` int(10) NOT NULL AUTO_INCREMENT,
        `title` varchar(100) NOT NULL,
	`description` text NOT NULL,
	`icon` varchar(100) NOT NULL,
 
  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
 
INSERT INTO `mod_table_portfolio` (`title`, `description`, `icon`) VALUES ('Название проекта 1', 'Описание проекта 1', 'images/icon1.png');
INSERT INTO `mod_table_portfolio` (`title`, `description`, `icon`) VALUES ('Название проекта 2', 'Описание проекта 2', 'images/icon2.png');
INSERT INTO `mod_table_portfolio` (`title`, `description`, `icon`) VALUES ('Название проекта 3', 'Описание проекта 3', 'images/icon3.png');
DROP TABLE IF EXISTS `mod_table_portfolio`

 

Переопределение структуры установочного файла mod_portfolio.xml

Добавим новый теги install и uninstall, которые будут выполняться на этапе установки и удаления модуля, в этих тегах укажем пути к нашим SQL-файлам и дополнительно добавим папку sql в тег распознавания фалов и директорий в теге files

<?xml version="1.0" encoding="utf-8"?>
<extension
	type="module"
	version="3.0"
	client="site">
	<name>Module Portfolio. Stage 4</name>
	<author>David Amirkhanov</author>
	<creationDate>August 2016</creationDate>
	<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
	<authorEmail>mail.websofter@gmail.com</authorEmail>
	<authorUrl>www.websofter.ru</authorUrl>
	<version>1.0.0</version>
	<description>Module Portfolio for Joomal CMS designed by David Amirkhanov</description>
	<files>
		<filename module="mod_portfolio">mod_portfolio.php</filename>
		<filename>index.html</filename>
        <filename>helper.php</filename>
        <folder>sql</folder>
		<folder>tmpl</folder>
        <folder>language</folder>
	</files>
        <media folder="tmpl" destination="mod_portfolio">
            <folder>images</folder>
            <folder>css</folder>
            <folder>js</folder>
        </media>
	<languages folder="language">
		<language tag="en-GB">en-GB/en-GB.mod_portfolio.ini</language>
		<language tag="en-GB">en-GB/en-GB.mod_portfolio.sys.ini</language>
		<language tag="ru-RU">ru-RU/ru-RU.mod_portfolio.ini</language>
		<language tag="ru-RU">ru-RU/ru-RU.mod_portfolio.sys.ini</language>
	</languages>
	<config>
		<fields name="params">
			<fieldset name="basic">
                            <field 
                                name="title" 
                                type="text"
                                label="MOD_PORTFOLIO_TITLE"
                                description="MOD_PORTFOLIO_TITLE_DESC"
                                required="true"
                                size="30"
                                class="mod-portfolio-title"
                                validate="" />
                            <field 
                                name="description" 
                                type="editor" 
                                default="" 
                                label="MOD_PORTFOLIO_DESCRIPTION" 
                                description="MOD_PORTFOLIO_DESCRIPTION_DESC"/>
                            <field 
                                name="icon" 
                                type="file"
                                label="MOD_PORTFOLIO_FILE" 
                                description="MOD_PORTFOLIO_FILE_DESC"
                                accept="images/*"/>
			</fieldset>
		</fields>
	</config>
    <install>
        <sql>
            <file driver="mysql" charset="utf8">sql/mod_portfolio.install.mysql.utf8.sql</file>
        </sql>
    </install>
    <uninstall>
        <sql>
            <file driver="mysql" charset="utf8">sql/mod_portfolio.uninstall.mysql.utf8.sql</file>
        </sql>
    </uninstall>
</extension>

 

Установка и демо

Теперь, при установке в БД данный модуль создаст отдельную таблицу mod_table_portfolio для модуля, в котором мы сможем сохранять, изменять и удалять данные портфолио

stage-4-module-table-in-list-of-tables-joomla-3

Данная таблица будет содержать структуры и первичные данные, которые были определены в файле инсталляции таблицы модуля mod_portfolio.install.mysql.utf8.sql

stage-4-module-table-data-and-structure-joomla-3

Скачать проект для данного шага создания модуля можно скачать по ссылке mod_portfolio_v1.0.0_stage_4.zip.

Определение языковых файлов для модуля Joomla 3.x

👁 54 просмотров

К списку «Проектирование модуля для Joomla 3.x»

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

Файлова структура модуля

Структура модуля изменится, мы добавим папку languages, в котором создадим подпапки ru-RU и en-GB, в которых, соответственно, будут находиться по паре файлов:

*.mod_portfolio.ini — этот файл является языковым пакетом для общего описания функционала.

*.mod_portfolio.sys.ini — этот файл является языковым пакетом для системной информации модуля.

new-structure-of-module-by-stage-2

Структура установочного файла mod_portfolio.xml

Теперь необходимо добавить дополнительный код в файл установки, чтобы определить папку языковых файлов и языковые пакеты. Если коротко, то каждое поле имеет 2 параметра(атрибута) в теге, которые выступают названием name и описанием — description. В предыдущем примере мы просто писали в эти атрибуты текст, а сейчас определим для них константы, которые будут потом по своему определены в каждом языковом файле, где в файле en-GB.mod_portfolio.ini этой константе будет присвоен английский текст, а в ru-RU.mod_portfolio.ini — русский текст. Код данного файла изменится следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<extension
	type="module"
	version="3.0"
	client="site">
	<name>WebSofter Module Portfolio. Stage 2</name>
	<author>David Amirkhanov</author>
	<creationDate>August 2016</creationDate>
	<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
	<authorEmail>mail.websofter@gmail.com</authorEmail>
	<authorUrl>www.websofter.ru</authorUrl>
	<version>1.0.0</version>
	<description>Module Portfolio for Joomal CMS designed by David Amirkhanov</description>
	<files>
		<filename module="mod_portfolio">mod_portfolio.php</filename>
		<filename>index.html</filename>
        <filename>helper.php</filename>
		<folder>tmpl</folder>
        <folder>language</folder>
	</files>
	<languages folder="language">
		<language tag="en-GB">en-GB/en-GB.mod_portfolio.ini</language>
		<language tag="en-GB">en-GB/en-GB.mod_portfolio.sys.ini</language>
		<language tag="ru-RU">ru-RU/ru-RU.mod_portfolio.ini</language>
		<language tag="ru-RU">ru-RU/ru-RU.mod_portfolio.sys.ini</language>
	</languages>
	<config>
		<fields name="params">
			<fieldset name="basic">
                            <field 
                                name="title" 
                                type="text"
                                label="MOD_PORTFOLIO_TITLE"
                                description="MOD_PORTFOLIO_TITLE_DESC"
                                required="true"
                                size="30"
                                class="mod-portfolio-title"
                                validate="" />
                            <field 
                                name="description" 
                                type="editor" 
                                default="" 
                                label="MOD_PORTFOLIO_DESCRIPTION" 
                                description="MOD_PORTFOLIO_DESCRIPTION_DESC"/>
                            <field 
                                name="icon" 
                                type="file"
                                label="MOD_PORTFOLIO_FILE" 
                                description="MOD_PORTFOLIO_FILE_DESC"
                                accept="images/*"/>
			</fieldset>
		</fields>
	</config>
</extension>

 

А языковые файлы будут содержать описания этих констант

;System translate for module
MOD_PORTFOLIO_TITLE="Title"
MOD_PORTFOLIO_TITLE_DESC="Title of project"
MOD_PORTFOLIO_DESCRIPTION="Description"
MOD_PORTFOLIO_DESCRIPTION_DESC="Description of project"
MOD_PORTFOLIO_FILE="icon"
MOD_PORTFOLIO_FILE_DESC="Icon of project"
;Общий перевод для модуля
MOD_PORTFOLIO_TITLE="Название"
MOD_PORTFOLIO_TITLE_DESC="Название проекта"
MOD_PORTFOLIO_DESCRIPTION="Описание"
MOD_PORTFOLIO_DESCRIPTION_DESC="Описание проекта"
MOD_PORTFOLIO_FILE="Иконка"
MOD_PORTFOLIO_FILE_DESC="Иконка проекта"

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

Создание простого модуля для Joomla 3.x

👁 132 просмотров

К списку «Проектирование модуля для Joomla 3.x»

Назначение модуля

Чтобы проектировать модуль нам надо определиться с тем, что он будет делать. Данный модуль будет являться скриптом для вывода портфолио пользователя сайта и будет иметь возможность работать с БД и управлять содержимым портфолио.

Базовый скелет модуля

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

Файлы и папки модуля

Корень модуля выглядит так, как показано на картинке ниже и далее каждый файл разъясняется

stage-1-module-files-photo-foto-post-create-module-for-joomla

Следует отметить, что это не полный перечень файлов модуля, есть дополнительные, которые, в дальнейшем, будут добавляться по мере усложнения задачи

 

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

<?php
class ModPortfolio{
    //Поля главного класса
    public static $title = "";
    public static $description = "";
    public static $icon = "";
    //Методы главного класса
    public static function view($param){
        echo $param;
    }
}
?>

mod_portfoio.php — самый главный файл. Это точка входа в наш модуль. Именно он будет первым запускаться и является, своего рода, контроллером связи между данными и видом.

<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
require_once dirname(__FILE__) . '/helper.php';

//Выводим сообщение
ModPortfolio::view("<br/>Контент модуля из контроллера...<br/>");
//Подключаем схему
require( JModuleHelper::getLayoutPath( 'mod_portfolio') );
?>

mod_portfoio.xml — это манифест нашего модуля, в котором будут параметры, настройки модуля. Этот файл так же регламентирует процесс установки модуля и процесс его правильного удаления из системы Joomla.

<?xml version="1.0" encoding="utf-8"?>
<extension
	type="module"
	version="3.0"
	client="site">
	<name>WebSofter Module Portfolio. Stage 1</name>
	<author>David Amirkhanov</author>
	<creationDate>August 2016</creationDate>
	<license>GNU General Public License version 2 or later; see LICENSE.txt</license>
	<authorEmail>mail.websofter@gmail.com</authorEmail>
	<authorUrl>www.websofter.ru</authorUrl>
	<version>1.0.0</version>
	<description>Module Portfolio for Joomal CMS designed by David Amirkhanov</description>
	<files>
		<filename module="mod_portfolio">mod_portfolio.php</filename>
		<filename>index.html</filename>
                <filename>helper.php</filename>
		<folder>tmpl</folder>
	</files>
	<config>
		<fields name="params">
			<fieldset name="basic">
                            <field 
                                name="title" 
                                type="text"
                                label="Заголовок"
                                description="Заголовок проекта"
                                required="true"
                                size="30"
                                validate="" />
                            <field 
                                name="description" 
                                type="editor" 
                                default="" 
                                label="Описание" 
                                description="Описание проекта"/>
                            <field 
                                name="icon" 
                                type="file"
                                label="Иконка" 
                                description="Иконка проекта"
                                accept="images/*"/>
			</fieldset>
		</fields>
	</config>
</extension>


index.html — кладется в каждую папку, которую вы создаете, чтобы левый пользователь не мог зайти в каталог введя его адрес в браузере.

<!DOCTYPE html>
<html>
    <head>
        <title>Пусто</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <div>Вам сюда нельзя</div>
    </body>
</html>

tmpl — в этой папке лежат файлы-шаблоны, стили и скрипты, они отвечают за внешний вид модуля и ее динамическое оформление. Здесь наш HTML код с сопутствующим оформлением.

tmpl/default.php — этот файл является видом по умолчанию. Т.е. если вы не указываете какой-то конкретный шаблон, запускается default.php, который распознается системой, а его именование стандартное и задокументированное.

<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
?>

<article style="background-color: #cccccc; border:1px solid silver;">
    Контент модуля из шаблона...
    <br/>
    <button id="mod-portfolio-btn">Кнопка</button>
</article>

 

Установка…

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

admin-side-of-module-joomla-by-stage-1

а со стороны клиента

module-output-info-joomla

В дальнейшем усложним задачу и добавим дополнительный функционал. Данный шаг проекта можно скачать по ссылке mod_portfolio_v1.0.0_stage_1.zip.

Сброс пароля администратора в Joomla через запрос SQL

👁 28 просмотров

Бывает случаи, когда теряется пароль и нет возможности восстановить пароль администратора панели управления Joomla, так как администратор не значится в списках обычных пользователей и его пароль нельзя восстановить через обычное восстановление(как я заметил), то одним из эффектиных решений по восстановлению является использование консоли запросов SQL в PhpMyAdmin. Для этого заходим в нужную таблицу, в нашем случае это таблица users и нажимаем на консоль запросов SQL для данной таблицы, как на картинке

post-remember-joomla-password-super-user

Далее вводим запрос


UPDATE `users`
  SET password= MD5( 'new_password' )
 WHERE id = 618;

post-remember-joomla-password-super-user-run-in-console

Жмем Ctrl+Enter и входим под новым паролем!