PhpStorm вставляет язык в область ‹![CDATA[ в файле xml

Сейчас я работаю над проектом 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 для разработки. По умолчанию он поставляется с плагином для вставки кода в исходные файлы. .

Существуют ли какие-либо технологии для подсветки синтаксиса для инъекций в XML-код?

P.S. Я нашел этот ответ, но он мне не подходит, потому что PHP-инъекции в моем файле не имеют <?php и ?> теги.


person userlond    schedule 08.09.2019    source источник
comment
Чтобы PhpStorm обрабатывал код как PHP, файл должен быть связан с типом файла PHP. Вы не можете взять случайный файл и сказать, что этот бит - PHP, поскольку поддержка PHP еще не имеет реализации PHP как Injectable Language в IDE. Следующая версия PhpStorm 2019.3 будет поставляться с инъекционным PHP. ATM Я не знаю, будет ли это работать для вашего примера (и как это работает в целом), поскольку в нем нет тегов PHP... Нужно дождаться запуска программы EAP 2019.3 и только потом пробовать.   -  person LazyOne    schedule 08.09.2019
comment
Прямо сейчас эти билеты кажутся подходящими (еще не реализованы: youtrack.jetbrains.com/issue/WI -47857) -- относится к случаям, подобным вашему (см. github.com/Combodo/iTop/blob/develop/datamodels/2.x/). Не стесняйтесь комментировать там свои примеры (чтобы разработчики знали, что такая функция востребована).   -  person LazyOne    schedule 08.09.2019
comment
@LazyOne, спасибо за ответ и комментарий в YouTrack. Вы можете ответить на вопрос, и я приму его.   -  person userlond    schedule 09.09.2019


Ответы (2)


Файл должен быть связан с типом файла «Файл PHP», чтобы PhpStorm мог обеспечить поддержку PHP в таком файле. Вы не можете взять случайный файл и сказать, что «этот раздел здесь и там — это PHP», поскольку поддержка PHP еще не имеет реализации «PHP как инъекционный язык» в IDE. В вашем файле нет PHP-тегов (<?php ... ?>), поэтому стандартная штука с Template Date Language здесь не поможет.

Следующая версия PhpStorm 2019.3 будет поставляться с инъекционным PHP. ATM Я не знаю, будет ли это работать для вашего примера (и как это работает в целом); на основе существующих билетов он предназначался для внедрения в другие литералы, которые уже используют код PHP: например. eval(), блоки PHP в Markdown и тому подобное. Нужно дождаться запуска программы EAP 2019.3 и только потом пробовать.


Сейчас этот билет точно соответствует вашим потребностям: https://youtrack.jetbrains.com/issue/WI-47857 – смотрите (звездочка/голосование/комментарий), чтобы получать уведомления о любом прогрессе.

Это относится к случаям, подобным вашему (см. github.com/Combodo/iTop).

Не стесняйтесь комментировать там свои примеры (чтобы разработчики знали, что такая функция востребована).

person LazyOne    schedule 09.09.2019

Вы используете неправильный синтаксис для ocmod для использования в Opencart. Должно быть:

<?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>
person K. B.    schedule 08.09.2019
comment
Я исправил фрагмент, чтобы он представлял полный ocmod-файл, а не извлеченный фрагмент. Но ваш ответ не помогает решить проблему. - person userlond; 08.09.2019
comment
Вы действительно проверили весь код? в вашем коде вы используете file name= должно быть file path=. И вы используете <search position="after">, position="after" должно быть помещено в <add position="after"> - person K. B.; 08.09.2019
comment
Вы правы насчет синтаксиса OCMOD, но вопрос связан с поддержкой подсветки в IDE. - person userlond; 09.09.2019
comment
Тем не менее, вы правы, я внес изменения, о которых идет речь, спасибо. - person userlond; 09.09.2019