我正在开发一个插件,并希望在一些文本常量中使用插件 ID。所以我想我会做以下事情:在 postflight-code 中,找到插件的 id 并在语言文件中替换它。为了轻松“查看”它的执行情况,我还决定最初使用扩展名“inix”命名语言文件,并将其替换为“ini”作为 postflight 的一部分。但这不会发生,不会执行 postflight !为什么?
此外,如果您愿意花更多时间进行调查,语言文件的处理存在问题,我不知道如何处理:在第一次安装后,您会看到显示文本 COM_FOO_PLG_DESC - 这个常量不会被它的值替换。如果你那时。去编辑 zip 并将 .ini 文件中的版本号更改为 2 并再次安装,您会注意到显示了此文本,但仍然指的是 V1!所以......在安装过程中不会重新读取更新的语言文件 - 我相信这应该发生!所以我还插入了代码以将其重新加载到 postflight 中,但是......(见上文)它没有被执行。
整个内容可以从http://mbaas.de/plg_foo.zip获取 ,这里有一些要点:
foo.xml:
<?xml version="1.0" encoding="utf-8"?>
<extension type="plugin" version="1.6" method="upgrade" group="content">
<name>Content - foo</name>
<creationDate>2013-05-30</creationDate>
<version>2.0.0.16</version>
<releaseDate>2013-05-30 12:00:58</releaseDate>
<releaseType>First public release!</releaseType>
<author>Michael Baas</author>
<authorEmail>mb@mbaas.de</authorEmail>
<authorUrl>mbaas.de</authorUrl>
<copyright>(c) 2013 Michael Baas</copyright>
<description>COM_FOO_PLG_DESC</description>
<files>
<filename plugin="foo">foo.php</filename>
<folder>language</folder>
</files>
<scriptfile>foo.scriptfile.php</scriptfile>
<languages folder="language">
<language tag="en-GB">en-GB/en-GB.plg_content_foo.ini</language>
<language tag="de-DE">de-DE/de-DE.plg_content_foo.ini</language>
<language tag="en-GB">en-GB/en-GB.plg_content_foo.sys.inix</language>
<language tag="de-DE">de-DE/de-DE.plg_content_foo.sys.inix</language>
</languages>
</extension>
和 foo.scriptfile.php:
<?php
class plgContentcbmdebugInstallerScript
{
public function __constructor(JAdapterInstance $adapter)
{
}
static function loadLanguage() {
$lang =& JFactory::getLanguage();
$lang->load('plgContentfoo', JPATH_ADMINISTRATOR , null , true);
}
function preflight($type, $adapter)
{
echo "<b>prelight!</b>";
$table = JTable::getInstance('extension');
if ($table->load(array('element' => 'foo', 'type' => 'plugin')))
{
$id=$table->extension_id;
$arr = array(
0=>"de-DE",
1=>"en-GB"
);
foreach($arr as $iso) {
$fl_lng = JPATH_ADMINISTRATOR . "/language/$iso/$iso.plg_content_foo.sys.ini";
unlink($fl_lng);
}
}
}
function postflight($type, $adapter)
{
echo "<b>postflight!</b>";
$table = JTable::getInstance('extension');
if ($table->load(array('element' => 'foo', 'type' => 'plugin')))
{
$id=$table->extension_id;
$arr = array(
0=>"de-DE",
1=>"en-GB"
);
foreach($arr as $iso) {
$fl_lngx = JPATH_PLUGINS . "/content/cbmdebug/language/$iso/$iso.plg_content_foo.sys.inix";
$fl_lng = JPATH_ADMINISTRATOR . "/language/$iso/$iso.plg_content_cbmdebug.sys.ini";
$xx = file_get_contents($fl_lngx);
$xx = str_replace("tHiS-Id",$id,$xx);
file_put_contents($fl_lng,$xx);
unlink($fl_lngx);
}
self::loadLanguage();
}
}
}
?>