【问题标题】:PhpStorm inject language into <![CDATA[ area in xml filePhpStorm 将语言注入 <![CDATA[ xml 文件中的区域
【发布时间】:2019-09-08 04:12:53
【问题描述】:

我现在正在开发 OpenCart 项目,该项目大量使用 XML 配置进行扩展(称为 OCMOD)。

XML 配置是声明与 PHP/CSS/JavaScript 代码注入的混合,请参阅下面的实际 OCMOD 修改文件的一部分:

<?xml version="1.0" encoding="UTF-8"?>
<modification>
    <name>some name</name>
    <id>some ID</id>
    <version>some version</version>
    <code>some code</code>
    <author>author</author>
    <link><![CDATA[link]]></link>
    <file path="catalog/controller/product/product.php">
        <operation>
            <search><![CDATA[
$product_info = $this->model_catalog_product->getProduct($product_id);
        ]]></search>
            <add position="after"><![CDATA[
            // some PHP code here
            $s = 'hello world';
            echo $s;
        ]]></add>
        </operation>
    </file>
</modification>

我使用 PHPStorm 2019.2 进行开发。默认情况下,它与plugin to inject code 捆绑到源文件中。

是否有任何技术可以实现注入 XML 代码的语法高亮显示?

附:我找到了this answer,但它不符合我的需求,因为我的文件中的 PHP 注入没有 &lt;?php?&gt; 标记。

【问题讨论】:

  • 对于 PhpStorm,要像 PHP 一样处理代码,文件必须与“PHP 文件”文件类型相关联。您不能随机获取文件并说“这个位是 PHP”,因为 PHP 支持在 IDE 中还没有“PHP 作为可注入语言”实现。下一个 2019.3 版本的 PhpStorm 将带有 Injectable PHP。 ATM 我不知道这是否适用于您的示例(以及它的整体工作方式),因为它没有 PHP 标记...需要等待 2019.3 EAP 程序启动,然后才能尝试。
  • 现在这张票看起来像是一场比赛(尚未实施:youtrack.jetbrains.com/issue/WI-47857)——它指的是与您类似的案例(参见github.com/Combodo/iTop/blob/develop/datamodels/2.x/…)。随时用您的示例发表评论(以便开发人员知道需要此类功能)。
  • @LazyOne,感谢您在 YouTrack 中的回复和评论。你可以回答这个问题,我会接受的。

标签: xml phpstorm opencart2.x cdata ocmod


【解决方案1】:

该文件必须与“PHP 文件”文件类型相关联,以便 PhpStorm 在此类文件中提供 PHP 支持。你不能随便拿一个文件说“从这里到那里的这一部分是 PHP”,因为 PHP 支持在 IDE 中还没有“PHP 作为可注入语言”实现。您的文件没有 PHP 标记 (&lt;?php ... ?&gt;),因此模板日期语言的标准内容在这里没有帮助。

PhpStorm 的下一个 2019.3 版本将配备 Injectable PHP。 ATM 我不知道这是否适用于您的示例(以及它的整体工作方式);基于现有的票据,它意味着被注入到已经在使用 PHP 代码的其他文字中:例如eval(),Markdown 中的 PHP 块和类似的东西。需要等待2019.3 EAP程序启动后再试。


目前,这张票似乎完全符合您的需求:https://youtrack.jetbrains.com/issue/WI-47857 -- 观看(星号/投票/评论)以获得任何进展的通知。

指的是和你类似的案例(见github.com/Combodo/iTop)。

请随时用您的示例发表评论(以便开发人员知道需要此类功能)。

【讨论】:

    【解决方案2】:

    您在 Opencart 中使用的 ocmod 语法不正确。 必须是:

    <?xml version="1.0" encoding="UTF-8"?>
    <modification>
        <name>some name</name>
        <id>some ID</id>
        <version>some version</version>
        <code>some code</code>
        <author>author</author>
        <link><![CDATA[link]]></link>
    <file path="catalog/controller/product/product.php">
        <operation error="log">
            <search><![CDATA[
                $product_info = $this->model_catalog_product->getProduct($product_id);
            ]]></search>
            <add position="after"><![CDATA[
                // some PHP code here
                $s = 'hello world';
                echo $s;
            ]]></add>
        </operation>
    </file>
    </modification>
    

    【讨论】:

    • 我已经修复了 sn-p 以表示完整的 ocmod 文件,而不是提取的 sn-p。但你的回答无助于解决问题。
    • 你真的检查过整个代码吗?在您的代码中,您使用的file name= 必须是file path=。而你用&lt;search position="after"&gt;position="after"一定要放到&lt;add position="after"&gt;
    • 您对 OCMOD 语法的看法是正确的,但问题与 IDE 中的高亮支持有关。
    • 不过,你是对的,我已经对问题进行了修改,谢谢。
    猜你喜欢
    • 2013-09-02
    • 2011-12-28
    • 2012-08-11
    • 1970-01-01
    • 2013-02-20
    • 2013-03-10
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    相关资源
    最近更新 更多