Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


ajs
 Поделиться

Рекомендованные сообщения

Помогите советом. Пытаюсь заменить несколько строк с помощью 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>

Ссылка на комментарий
Поделиться на других сайтах


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

<add position="replace" offset=" количество строк">
  • +1 2
Ссылка на комментарий
Поделиться на других сайтах

  • 8 месяцев спустя...
  • 1 год спустя...

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

Фикс добавляет поддержку атрибута 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); 
}

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

Ссылка на комментарий
Поделиться на других сайтах

  • 11 месяцев спустя...

изменил 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>

 

Изменено пользователем stydent
Ссылка на комментарий
Поделиться на других сайтах


  • 2 года спустя...

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

// - следующий мод убирате блок НАЛИЧИЕ
        <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>, а таких строк в файле было много!

Изменено пользователем Megafara
Ссылка на комментарий
Поделиться на других сайтах


  • 1 месяц спустя...

Подскажите как можно в 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>

 

Ссылка на комментарий
Поделиться на других сайтах


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

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

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

  • +1 1
Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.