Moodle 插件:检查是否 admin + 添加 link 到管理插件
Moodle plugin : check if admin + add link to plugin in administration
我是 moodle 插件开发的新手,我正在尝试创建一个向管理员显示页面的插件,我可以在其中添加我的 php 代码。
简而言之,我希望插件执行的操作已在我上传到 moodle 根目录的标准 php 文件中实现。从这里您可以调用文件,例如yourdomain.co.uk/moodlelocation/myfile.php 并且它将 运行 如预期的那样。
问题是它不安全,因为任何人都可以加载 myfile.php 并进而 运行 页面上的脚本。这也意味着任何其他人使用此脚本(完成后将免费赠送)需要 FTP 到他们的主机并将两个 php 文件上传到他们的 moodle 安装。
因此,我认为插件(一个非常非常基本的插件)可能是最好的解决方案。然后他们可以通过 "site administration" 在管理员中加载页面。例如站点管理 > 开发 > MyPlugin。我假设我也可以将插件的主页限制为仅限管理员 (??)。
总而言之,我可以创建一个 php 页面,其中包含我的脚本,但我需要将其制作成一个插件。
我读了一些书,我认为 "local" 插件是最简单的方法 (??)。
我已经成功地启动了本地插件并 运行ning 使用下面 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
访问它
- 站点管理中没有 link(因此用户需要输入 URL)。
任何人都可以阐明我将如何实现上述两个步骤吗?
提前致谢
p.s。理想情况下,我希望将插件保留在尽可能少的文件中,因此如果可以将所需的代码添加到 local/webguides/index.php 文件中,那将是首选。
您需要创建一个功能,然后在显示页面之前需要该功能。
首先,请查看 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
添加 link
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');
我是 moodle 插件开发的新手,我正在尝试创建一个向管理员显示页面的插件,我可以在其中添加我的 php 代码。
简而言之,我希望插件执行的操作已在我上传到 moodle 根目录的标准 php 文件中实现。从这里您可以调用文件,例如yourdomain.co.uk/moodlelocation/myfile.php 并且它将 运行 如预期的那样。
问题是它不安全,因为任何人都可以加载 myfile.php 并进而 运行 页面上的脚本。这也意味着任何其他人使用此脚本(完成后将免费赠送)需要 FTP 到他们的主机并将两个 php 文件上传到他们的 moodle 安装。
因此,我认为插件(一个非常非常基本的插件)可能是最好的解决方案。然后他们可以通过 "site administration" 在管理员中加载页面。例如站点管理 > 开发 > MyPlugin。我假设我也可以将插件的主页限制为仅限管理员 (??)。
总而言之,我可以创建一个 php 页面,其中包含我的脚本,但我需要将其制作成一个插件。
我读了一些书,我认为 "local" 插件是最简单的方法 (??)。
我已经成功地启动了本地插件并 运行ning 使用下面 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 访问它
- 站点管理中没有 link(因此用户需要输入 URL)。
任何人都可以阐明我将如何实现上述两个步骤吗?
提前致谢
p.s。理想情况下,我希望将插件保留在尽可能少的文件中,因此如果可以将所需的代码添加到 local/webguides/index.php 文件中,那将是首选。
您需要创建一个功能,然后在显示页面之前需要该功能。
首先,请查看 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
添加 link
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');