PhpStorm 将语言注入 xml 文件中的 <![CDATA[ 区域

PhpStorm inject language into <![CDATA[ area in xml file

我现在正在从事 OpenCart 项目,该项目大量使用 XML-configs 进行扩展(称为 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 代码的语法高亮显示?

P.S。我找到了 this answer,但它不符合我的需要,因为 PHP-injections 在我的文件中没有 <?php?> 标签。

您在 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>

文件必须与 "PHP File" 文件类型相关联,以便 PhpStorm 在此类文件中提供 PHP 支持。你不能拿一个随机文件说 "this section from here to there is PHP" 因为 PHP 支持在 IDE 中还没有 "PHP as Injectable Language" 实现。您的文件没有 PHP 标签 (<?php ... ?>),因此模板日期语言的标准内容在这里无济于事。

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


现在这张票似乎完全符合您的需求:https://youtrack.jetbrains.com/issue/WI-47857 -- 观看它 (star/vote/comment) 以获得有关任何进展的通知。

它指的是与您类似的案例(参见github.com/Combodo/iTop)。

请随意在此处评论您的示例(以便开发人员知道对此类功能的需求)。