亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Moodle 插件:檢查管理員是否在管理中添加指向插件的鏈接

Moodle 插件:檢查管理員是否在管理中添加指向插件的鏈接

PHP
浮云間 2023-04-02 10:15:29
我是 moodle 插件開發的新手,正在嘗試創建一個向管理員顯示頁面的插件,我可以在其中添加我的 php 代碼。簡而言之,我希望插件執行的操作已經在我上傳到 moodle 根目錄的標準 php 文件中實現了。從這里您可以調用文件,例如 yourdomain.co.uk/moodlelocation/myfile.php,它將按預期運行。這樣做的問題是它不安全,因為任何人都可以加載 myfile.php 并依次在頁面上運行腳本。這也意味著任何其他人使用此腳本(完成后將免費贈送)需要通過 FTP 連接到他們的主機并將兩個 php 文件上傳到他們的 moodle 安裝。因此,我認為插件(一個非常非?;镜牟寮┛赡苁亲詈玫慕鉀Q方案。然后他們可以通過“站點管理”在管理員中加載頁面。例如站點管理 > 開發 > MyPlugin。我假設我也可以將插件的主頁限制為僅限管理員 (??)??偠灾?,我可以創建一個 php 頁面,讓我的腳本搖擺不定,但我需要將其制作成一個插件。我做了一些閱讀,我認為“本地”插件是最簡單的方法(??)。我已經設法使用 local/webguides/inex.php 中的以下內容啟動并運行本地插件:<?php// Standard config file and local library.require_once(__DIR__ . '/../../config.php');// Setting up the page.$PAGE->set_context(context_system::instance());$PAGE->set_pagelayout('standard');$PAGE->set_title("webguides");$PAGE->set_heading("webguides");$PAGE->set_url(new moodle_url('/local/webguides/index.php'));// Ouput the page header.echo $OUTPUT->header();echo 'MY php CODE here etc';?>這工作正常但有兩個問題:任何人都可以通過http://domain/local/webguides/index.php訪問它站點管理中沒有指向它的鏈接(因此用戶需要輸入 URL)。誰能闡明我將如何實現上述兩個步驟?提前致謝ps 理想情況下,我希望將插件保留在盡可能少的文件中,因此如果可以將所需的代碼添加到 local/webguides/index.php 文件中,那將是首選。
查看完整描述

1 回答

?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

您需要創建一個功能,然后在顯示頁面之前需要該功能。


首先,看一下local/readme.txt- 這給出了本地插件所需文件的概述。


或者閱讀https://docs.moodle.org/dev/Local_plugins上的文檔


還可以查看現有的本地插件,以便了解它們是如何創建的 - https://moodle.org/plugins/?q=type:local


至少,你需要


local/webguides/db/access.php - this will have the capability

local/webguides/lang/en/local_webguides.php

local/webguides/version.php

加上你的索引文件


local/webguides/index.php

在db/access.php文件中有類似的東西


defined('MOODLE_INTERNAL') || die();


$capabilities = array(


    'local/webguides:view' => array(

        'captype' => 'read',

        'contextlevel' => CONTEXT_SYSTEM,

        'archetypes' => array(

        ),

    ),


);

您可能還需要'riskbitmask' => RISK_XXX取決于您的代碼中是否存在任何風險。如RISK_CONFIG,RISK_PERSONAL等


在lang/en/local_webguides.php有類似的東西


defined('MOODLE_INTERNAL') || die();


$string['pluginname'] = 'Webguides';

$string['webguides:view'] = 'Able to view webguids';

在version.php有類似的東西


defined('MOODLE_INTERNAL') || die();


$plugin->version   = 2020051901;        // The current plugin version (Date: YYYYMMDDXX)

$plugin->requires  = 2015051109;        // Requires this Moodle version.

$plugin->component = 'local_webguides'; // Full name of the plugin (used for diagnostics).

替換2015051109為您正在使用的 Moodle 版本 - 這將位于version.php根文件夾中。


然后在你的index.php文件中使用它靠近頂部。


require_capability('local/webguides:view', context_system::instance());

因此只有具有該能力的用戶才能訪問該頁面。


編輯:


settings.php您可以使用類似的方式添加鏈接


defined('MOODLE_INTERNAL') || die;


if ($hassiteconfig) {

    $page = new admin_externalpage(

        'local_webguides',

        get_string('pluginname', 'local_webguides'),

        new moodle_url('/local/webguides/index.php'),

        'local/webguides:view'

    );


    $ADMIN->add('localplugins', $page);

}

然后在你的索引頁廣告這個


require_once($CFG->libdir.'/adminlib.php');

并刪除require_login()并require_capability()替換為


admin_externalpage_setup('local_webguides');


查看完整回答
反對 回復 2023-04-02
  • 1 回答
  • 0 關注
  • 124 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號