Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 插件安装:postflight未执行,语言文件未重新读取_Php_Joomla_Joomla3.0 - Fatal编程技术网

Php 插件安装:postflight未执行,语言文件未重新读取

Php 插件安装:postflight未执行,语言文件未重新读取,php,joomla,joomla3.0,Php,Joomla,Joomla3.0,我正在开发一个插件,希望在一些文本常量中使用插件id。所以我想我会做以下工作:在postflight代码中,找到插件的id并将其替换到语言文件中。为了方便地“查看”它的执行情况,我还决定最初将语言文件的扩展名命名为“inix”,并将其替换为“ini”,作为postflight的一部分。但这并没有发生,飞行后不会执行!为什么? 另外,如果您想花更多的时间进行调查,那么在处理语言文件时会出现问题,我不知道如何处理:在第一次安装之后,您会看到显示了文本COM_FOO_PLG_DESC-这个常量没有用它

我正在开发一个插件,希望在一些文本常量中使用插件id。所以我想我会做以下工作:在postflight代码中,找到插件的id并将其替换到语言文件中。为了方便地“查看”它的执行情况,我还决定最初将语言文件的扩展名命名为“inix”,并将其替换为“ini”,作为postflight的一部分。但这并没有发生,飞行后不会执行!为什么?

另外,如果您想花更多的时间进行调查,那么在处理语言文件时会出现问题,我不知道如何处理:在第一次安装之后,您会看到显示了文本COM_FOO_PLG_DESC-这个常量没有用它的值替换。如果你愿意的话。去编辑zip文件,并将.ini文件中的版本号更改为2,然后再次安装,您会注意到显示了此文本,但仍然指向V1!所以…更新后的语言文件在安装过程中不会被重新读取-我相信这应该会发生!所以我也插入了代码,将其重新加载到postflight中,但是…(见上文)它不会被执行


整个东西都可以从 以下是一些要点:

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>

内容-富
2013-05-30
2.0.0.16
2013-05-30 12:00:58
第一次公开发布!
迈克尔·巴斯
mb@mbaas.de
mbaas.de
(c) 2013年迈克尔·巴斯
COM_FOO_PLG_DESC
foo.php
语言
foo.scriptfile.php
en GB/en-GB.plg\u content\u foo.ini
de de/de-de.plg_content_foo.ini
en GB/en-GB.plg\u content\u foo.sys.inix
de de/de-de.plg\u content\u foo.sys.inix
和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();
        }
    }
}
?>

首先,脚本文件的类名需要与插件的名称相关联。这意味着,如果插件是名为foo的内容插件,则类名必须是
plgcontentfoooinstallerscript
。 但是,脚本文件的类名是
plgcontentcbmdughtinstallerscript
。我想你重新命名了插件,在这里显示,但错过了那一个。假设您的插件名为
cbmdebug
,则类名仍然是错误的,因为它应该是
plgContentCbmdebugInstallerScript
(注意大写字符)

至于加载的语言文件。在安装过程中,仅加载sys.ini文件。由于包中没有这样的文件,Joomla无法加载任何内容


旁注:你为什么还要操纵语言字符串?您是否尝试使用
JText::sprintf()
()。它允许您将插件id传递给PHP sprintf函数插入的语言字符串。

首先,脚本文件的类名需要与插件的名称相关。这意味着,如果插件是名为foo的内容插件,则类名必须是
plgcontentfoooinstallerscript
。 但是,脚本文件的类名是
plgcontentcbmdughtinstallerscript
。我想你重新命名了插件,在这里显示,但错过了那一个。假设您的插件名为
cbmdebug
,则类名仍然是错误的,因为它应该是
plgContentCbmdebugInstallerScript
(注意大写字符)

至于加载的语言文件。在安装过程中,仅加载sys.ini文件。由于包中没有这样的文件,Joomla无法加载任何内容

旁注:你为什么还要操纵语言字符串?您是否尝试使用
JText::sprintf()
()。它允许您将插件id传递给PHP sprintf函数插入的语言字符串。

谢谢-在我构建示例时,“cbmdebug”应该被替换为“foo”,这样做之后,代码肯定会被执行!:-)sys.ini应该是在飞行后插入id后创建的。这样做的原因是我想在描述中使用该id,这样我就可以在那里sprintf。。。现在将修改我的原始脚本,看看接下来会发生什么,非常感谢您的帮助!:)谢谢-当我构建示例时,“cbmdebug”应该被替换为“foo”,这样做之后,代码肯定会被执行!:-)sys.ini应该是在飞行后插入id后创建的。这样做的原因是我想在描述中使用该id,这样我就可以在那里sprintf。。。现在将修改我的原始脚本,看看接下来会发生什么,非常感谢您的帮助!:)