Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

OCMOD замена нескольких строк


Recommended Posts

Помогите советом. Пытаюсь заменить несколько строк с помощью OCMOD в  OC 2 . если одну менять , то все работает, а если в search несколько строк добавить, то не работает.  

 

Пример который не работает:



<operation>
            <search><![CDATA[
              if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/account/address_form.tpl')) {
    $this->response->setOutput($this->load->view($this->config->get('config_template') . '/template/account/address_form.tpl', $data));
    } else {
    $this->response->setOutput($this->load->view('default/template/account/address_form.tpl', $data));
    }
            ]]></search>
                <add position="replace"><![CDATA[
              if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/account/custom_address_form.tpl')) {
            $this->response->setOutput($this->load->view($this->config->get('config_template') . '/template/account/custom_address_form.tpl', $data));
            } else {
            $this->response->setOutput($this->load->view('default/template/account/custom_address_form.tpl', $data));
            }
            ]]></add>
        </operation>

Link to post
Share on other sites

Ищем первую строку,меняем её и определённое количество после неё

<add position="replace" offset=" количество строк">
  • +1 1
Link to post
Share on other sites
Награды

VQMOD / OCMOD ищут только по одной строке

для поиска по нескольким - делать отдельно для каждой

Link to post
Share on other sites

  • 8 months later...
  • 1 year later...

Иногда при написании модификаторов для Опенкарт возникает необходимость поиска многострочных маркеров для более высокой точности.

Фикс добавляет поддержку атрибута qoute, с которым используется функция preg_quote(). Изменения производятся в файле admin/controller/extension/modification.php. 

Нужно найти следующий фрагмент кода:

$search = trim($operation->getElementsByTagName('search')->item(0)->textContent); 
$limit = $operation->getElementsByTagName('search')->item(0)->getAttribute('limit'); 
$replace = trim($operation->getElementsByTagName('add')->item(0)->textContent);

И заменить его на этот (добавилась строка):

$search = $operation->getElementsByTagName('search')->item(0)->textContent; 
$limit = $operation->getElementsByTagName('search')->item(0)->getAttribute('limit'); 
$quote = $operation->getElementsByTagName('search')->item(0)->getAttribute('quote'); 
$replace = $operation->getElementsByTagName('add')->item(0)->textContent;

Далее после блока:
 

// Limit 
if (!$limit) { 
   $limit = -1; 
}

Добавить этот:

// Quote 
if ($quote == 'true') { 
    $search = preg_quote($search); 
}

Вот и все! Не забудьте сохранить файл и очистить кеш.

Link to post
Share on other sites

  • 11 months later...

изменил admin/controller/extension/modification.php как написали.

но мой модификатор не работает с двумя строчками. с одной все ок. чего может не хватать?

<?xml version="1.0" encoding="utf-8"?>
<modification>
  <name>my_hack</name>
  <code>2</code>
  <version>228</version>
  <author>Андрей</author>
  <link>5</link>
<file path="catalog/view/theme/default/template/common/header.tpl">
        <operation>
            <search reqex="true" quote="true" limit="2"><![CDATA[
<script src="catalog/view/javascript/jquery/jquery-2.1.1.min.js" type="text/javascript"></script>
<link href="catalog/view/javascript/bootstrap/css/bootstrap.min.css" rel="stylesheet" media="screen" />
]]></search>
            <add position="replace"><![CDATA[
            4545
            ]]></add>
        </operation>  
        
        
    </file>
</modification>

 

Edited by stydent
Link to post
Share on other sites

  • 2 years later...

Мне помогло убрать блок НАЛИЧИЕ вот так:

// - следующий мод убирате блок НАЛИЧИЕ
        <file path="catalog/view/theme/newstore/template/product/product.tpl">
          <operation>
            <search regex="true"><![CDATA[%<hr>[^<]*?<ul class="list-unstyled availability">[^.]*?</ul>%]]></search>
            <add position="replace"><![CDATA[]]></add>
          </operation>
        </file>

Это касается как раз замены нескольких строк, потому что блок начинался с <HR>, а таких строк в файле было много!

Edited by Megafara
Link to post
Share on other sites

  • 1 month later...

Подскажите как можно в 21 веке сделать нечто подобное:

        <operation>
            <search><![CDATA[<div id="recaptcha1">]]></search>
            <add position="replace"><![CDATA[<div class="g-recaptcha">]]></add>
            <search><![CDATA[var onloadCallback = function() {]]></search>
            <add position="replace" offset="1"><![CDATA[
			      var onloadCallback = function() {
        var divcaptcha = document.getElementsByClassName('g-recaptcha');
        for (var i = 0; i < divcaptcha.length; i++) {
          grecaptcha.render(divcaptcha[i], {
            'sitekey': '{{ site_key }}'
          });
        }
      };
			]]></add>       
        </operation>

 

Link to post
Share on other sites

1 час назад, susl16c сказал:

Подскажите как можно в 21 веке сделать нечто подобное:

Сделать что? Научиться не писать в одном  <operation> несколько  <search> ?

  • +1 1
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.