溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

joomla 3.x 創(chuàng)建簡單的模塊

發(fā)布時(shí)間:2020-07-10 17:56:10 來源:網(wǎng)絡(luò) 閱讀:1704 作者:hello_world007 欄目:web開發(fā)

(一)開發(fā)一個(gè)基本的模塊

說明:
joomla中的模塊是輕量的可伸縮的擴(kuò)展。它們通常用于最少的頁面輸出,有點(diǎn)復(fù)雜并通穿插在不同的組件中。

文件結(jié)構(gòu):
在標(biāo)準(zhǔn)的joomla模塊開發(fā)中有如下幾個(gè)基本的文件,比如你開發(fā)的是一個(gè)helloworld的模塊
mod_helloworld.php 這個(gè)主要是模塊的入口文件。它執(zhí)行的是任何需要的初始化程序及調(diào)用幫助類程序收集數(shù)據(jù),還有調(diào)用模塊中輸出需要的模板
mod_helloworld.xml 這是模塊信息定義文件。它定義了一些需要安裝的文件及模塊需要的參數(shù)定義。
helper.php 這個(gè)文件里面包涵了給模塊檢索信息并展示的幫助類。
tmpl/default.php 模塊的模板。就是如何展示模塊收集的數(shù)據(jù)

創(chuàng)建 mod_helloworld.php
mod_helloworld.php 文件有三個(gè)任務(wù)
1.引入 helper.php 文件
2.調(diào)用helper.php 幫助類來檢索需要的數(shù)據(jù)
3.引入模板來展示檢索的數(shù)據(jù)
文件內(nèi)容如下:

<?php
#確認(rèn)該文件是被joomla引入的,而不是被直接訪問的
defined('_JEXEC') or die;
引入幫助類文件
require_once dirname(__FILE__) . '/helper.php';

調(diào)用幫助類中的方法
$hello = modHelloWorldHelper::getHello($params);
引入JModuleHelper中的getLayoutPath方法來找到該模塊的模板文件來處理該模塊中的數(shù)據(jù),如$hello
require JModuleHelper::getLayoutPath('mod_helloworld');

創(chuàng)建helper.php

<?php
class ModHelloWorldHelper
{
    public static function getHello($params)
    {
        return 'Hello, World!';
    }
}

創(chuàng)建tmpl/default.php

<?php
// No direct access
defined('_JEXEC') or die; ?>
<?php echo $hello; ?>

創(chuàng)建mod_helloworld.xml

<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="3.1.0" client="site" method="upgrade">
    <name>Hello, World!</name>
    <author>John Doe</author>
    <version>1.0.0</version>
    <description>A simple Hello, World! module.</description>
    <files>
        <filename>mod_helloworld.xml</filename>
        <filename module="mod_helloworld">mod_helloworld.php</filename>
        <filename>index.html</filename>
        <filename>helper.php</filename>
        <filename>tmpl/default.php</filename>
        <filename>tmpl/index.html</filename>
    </files>
    <config>
    </config>
</extension>


(二)joomla基本的模塊中引用數(shù)據(jù)庫

在這部分中需要了解JDatabase的使用,可參考:https://docs.joomla.org/Accessing_the_database_using_JDatabase

在安裝時(shí)創(chuàng)建表,即在文件sql/mysql/install.mysql.utf8.sql中創(chuàng)建表

CREATE TABLE IF NOT EXISTS `#__helloworld` (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `hello` text NOT NULL,
    `lang` varchar(25) NOT NULL,

  PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

INSERT INTO `#__helloworld` (`hello`, `lang`) VALUES ('Hello World', 'en-GB');
INSERT INTO `#__helloworld` (`hello`, `lang`) VALUES ('Hola Mundo', 'es-ES');
INSERT INTO `#__helloworld` (`hello`, `lang`) VALUES ('Bonjour tout le monde', 'fr-FR');

然后需要補(bǔ)充卸載時(shí)需要執(zhí)行的sql,即文件sql/mysql/uninstall.mysql.utf8.sql中寫入卸載時(shí)需要執(zhí)行的sql

DROP TABLE IF EXISTS `#__helloworld`

當(dāng)然后后期開發(fā)中有對(duì)數(shù)據(jù)庫更新更新可以在sql/mysql/updates中添加更新sql文件,文件命名方式為版本號(hào).sql 如:2.0.0.sql

修改helper.php 文件中的help類
內(nèi)容如下:

<?php
class ModHelloWorldHelper
{
    public static function getHello($params)
    {
        $db = JFactory::getDbo();
        $query = $db->getQuery(true)
            ->select($db->quoteName('hello'))
            ->from($db->quoteName('#__helloworld'))
            ->where('lang = ' . $db->Quote('en-GB'));
        $db->setQuery($query);
        $result = $db->loadResult();
        return $result;
    }
}

最后修改mod_helloworld.xml中把需要的文件及文件的作用定義好

<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="3.1.0" client="site" method="upgrade">
    <name>Hello, World!</name>
    <author>John Doe</author>
    <version>4.0.0</version>
    <description>A simple Hello, World! module.</description>
    <files>
        <filename>mod_helloworld.xml</filename>
        <filename module="mod_helloworld">mod_helloworld.php</filename>
        <filename>index.html</filename>
        <filename>helper.php</filename>
        <filename>tmpl/default.php</filename>
        <filename>tmpl/index.html</filename>

        <folder>sql</folder>
    </files>

    <install>
        <sql>
            <file driver="mysql" charset="utf8">sql/mysql/install.mysql.utf8.sql</file>
        </sql>
    </install>

    <uninstall>
        <sql>
            <file driver="mysql" charset="utf8">sql/mysql/uninstall.mysql.utf8.sql</file>
        </sql>
    </uninstall>

    <update>
        <schemas>
            <schemapath type="mysql">sql/mysql/updates</schemapath>
        </schemas>
    </update>

    <config>

    </config>
</extension>

(三)給joomla模塊中添加表單字段
其實(shí)就是給模塊的顯示添加參數(shù)控制
首先在mod_helloworld.xml文件中的<config>元素里添加如下

<fields name="params">
    <fieldset name="basic">
        <field
               name="lang"
               type="sql"
               default="1"
               label="Select a language"
               query="SELECT id AS value, lang FROM #__helloworld" />
    </fieldset>
</fields>

上面這個(gè)是SQL表單字段的寫法,可參數(shù)https://docs.joomla.org/Special:MyLanguage/SQL_form_field_type
然后修改mod_helloworld.php中的內(nèi)容如下

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

#$params 是mod_helloworld.xml中的字段參數(shù)配置名,其中l(wèi)ang是其中的一個(gè)參數(shù)字段名,
#它的值是SELECT id AS value, lang FROM #__helloworld這個(gè)表里查詢出的id的值 
$language = $params->get('lang', '1');

$hello    = modHelloWorldHelper::getHello( $language );

require JModuleHelper::getLayoutPath('mod_helloworld');

最后修改helper.php文件,內(nèi)容如下

<?php
class ModHelloWorldHelper
{
    public static function getHello($params)
    {
        $db = JFactory::getDbo();
        $query = $db->getQuery(true)
            ->select($db->quoteName('hello'))
            ->from($db->quoteName('#__helloworld'))
            ->where('id = ' . $db->Quote($params));
        $db->setQuery($query);
        $result = $db->loadResult();
        return $result;
    }
}

最后mod_helloworld.xml的內(nèi)容如下:

<?xml version="1.0" encoding="utf-8"?>
<extension type="module" version="3.1.0" client="site" method="upgrade">
    <name>Hello, World!</name>
    <author>John Doe</author>
    <version>4.0.0</version>
    <description>A simple Hello, World! module.</description>
    <files>
        <filename>mod_helloworld.xml</filename>
        <filename module="mod_helloworld">mod_helloworld.php</filename>
        <filename>index.html</filename>
        <filename>helper.php</filename>
        <filename>tmpl/default.php</filename>
        <filename>tmpl/index.html</filename>

        <folder>sql</folder>
    </files>

    <install>
        <sql>
            <file driver="mysql" charset="utf8">sql/mysql/install.mysql.utf8.sql</file>
        </sql>
    </install>

    <uninstall>
        <sql>
            <file driver="mysql" charset="utf8">sql/mysql/uninstall.mysql.utf8.sql</file>
        </sql>
    </uninstall>

    <update>
        <schemas>
            <schemapath type="mysql">sql/mysql/updates</schemapath>
        </schemas>
    </update>

    <config>
        <fields name="params">
            <fieldset name="basic">
                <field
                        name="lang"
                        type="sql"
                        default="1"
                        label="Select a language"
                        query="SELECT id AS value, lang FROM #__helloworld1" />
            </fieldset>
        </fields>
    </config>
</extension>
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI