Jump to content
ILexus

ocmod найти кусок кода и заменить всю строку

Recommended Posts

Всем привет. Подскажите пожалуйста, не могу разобраться в проблеме.

 

Имеется код в языковом файл:

// Error
$_['error_login']                  = 'Неправильно заполнены поле E-Mail и/или пароль!';
$_['error_attempts']               = 'Вы превысили максимальное количество попыток авторизации. Повторите попытку авторизации на сайте через 1 час';
$_['error_approved']               = 'Необходимо подтвердить аккаунт перед авторизацией.';

Задача: заменить значение error_login на другое


Кусок кода ocmod:

        <operation>
            <search><![CDATA[$_['error_login']]]></search>
            <add position="replace"><![CDATA[
$_['error_login']                  = 'Неправильно заполнены поле E-Mail или Телефон и пароль!';
]]></add>
        </operation>


После применения ocmod получается так, что вызывает синтаксическую ошибку:
 

// Error

$_['error_login']                  = 'Неправильно заполнены поле E-Mail или Телефон и пароль!';
                  = 'Неправильно заполнены поле E-Mail и/или пароль!';
$_['error_attempts']               = 'Вы превысили максимальное количество попыток авторизации. Повторите попытку авторизации на сайте через 1 час';
$_['error_approved']               = 'Необходимо подтвердить аккаунт перед авторизацией.';


Как можно найти кусок кода и заменить всю строку? Не хочу искать по всей строке т.к. перевод в разных сборка Opencart может отличаться.

Edited by ILexus

Share this post


Link to post
Share on other sites
3 часа назад, ILexus сказал:

перевод в разных сборка Opencart может отличаться

вы не заменяйте, а вставляйте перед $_['error_attempts']:

	<search><![CDATA[
		$_['error_attempts']
	]]></search>
		<add position="before"><![CDATA[
$_['error_login'] = 'Новый текст';
		]]></add>

 

Share this post


Link to post
Share on other sites

Или так

<operation>
  <search><![CDATA[$_['error_login']                  = 'Неправильно заполнены поле E-Mail и/или пароль!';]]></search>
  <add position="replace"><![CDATA[
$_['error_login']                  = 'Неправильно заполнены поле E-Mail или Телефон и пароль!';
  ]]></add>
</operation>

 

Share this post


Link to post
Share on other sites
6 минут назад, klaos27 сказал:

Или так

 

4 часа назад, ILexus сказал:

перевод в разных сборка Opencart может отличаться

 

Share this post


Link to post
Share on other sites


 

4 часа назад, ILexus сказал:

Всем привет. Подскажите пожалуйста, не могу разобраться в проблеме.

 

Имеется код в языковом файл:


// Error
$_['error_login']                  = 'Неправильно заполнены поле E-Mail и/или пароль!';
$_['error_attempts']               = 'Вы превысили максимальное количество попыток авторизации. Повторите попытку авторизации на сайте через 1 час';
$_['error_approved']               = 'Необходимо подтвердить аккаунт перед авторизацией.';

Задача: заменить значение error_login на другое


Кусок кода ocmod:


        <operation>
            <search><![CDATA[$_['error_login']]]></search>
            <add position="replace"><![CDATA[
$_['error_login']                  = 'Неправильно заполнены поле E-Mail или Телефон и пароль!';
]]></add>
        </operation>


После применения ocmod получается так, что вызывает синтаксическую ошибку:
 


// Error

$_['error_login']                  = 'Неправильно заполнены поле E-Mail или Телефон и пароль!';
                  = 'Неправильно заполнены поле E-Mail и/или пароль!';
$_['error_attempts']               = 'Вы превысили максимальное количество попыток авторизации. Повторите попытку авторизации на сайте через 1 час';
$_['error_approved']               = 'Необходимо подтвердить аккаунт перед авторизацией.';


Как можно найти кусок кода и заменить всю строку? Не хочу искать по всей строке т.к. перевод в разных сборка Opencart может отличаться.

 

 

Частный случай 1

<operation>

<search><![CDATA[$_['error_login']]]></search>

<add position="after"><![CDATA[ $_['error_login'] = 'Неправильно заполнены поле E-Mail или Телефон и пароль!'; ]]></add>

</operation>

 

 

Частный случай 2

<operation>

<search><![CDATA[$_['error_login']]]></search>

<add position="replace"><![CDATA[ $_['error_login'] = 'Неправильно заполнены поле E-Mail или Телефон и пароль!'; // ]]></add>

</operation>

Share this post


Link to post
Share on other sites
<operation> 
<search index="1"><![CDATA[// Error]]></search> 
     <add position="replace"><![CDATA[ 
       // Error
        $_['error_login'] = 'Неправильно заполнены поле E-Mail или Телефон и пароль!';

    ]]></add> 
</operation>

На сколько я понял, речь именно про замену существующей строки, а не добавления новой.

 

Только почему не применить свою языковую переменную и не париться с заменой?

Edited by Tom

Share this post


Link to post
Share on other sites
1 час назад, Tom сказал:

Только почему не применить свою языковую переменную и не париться с заменой?

Языковая переменная может использоваться в нескольких местах и добавление своей приведёт к необходимости внесения множественных изменений.

Гораздо проще заменить, но при замене строки, в которой определена переменная, могут возникнуть проблемы, например с пробелами или табами...

Поэтому проще не заменять, а переопределить переменную. Именно это и предложил chukcha.

Для переопределения переменной не обязательно привязываться к строке в которой она определена. Я делаю так: привязка к <?php и добавление после привязки с заведомо большим offset, в итоге переменные добавляются в конец файла и гарантировано переопределяют переменные объявленные ранее.

    <operation>
      <search><![CDATA[<?php]]></search>
      <add position="after" offset="9999"><![CDATA[
$_['error_login'] = 'Неправильно заполнены поле E-Mail или Телефон и пароль!';
$_['error_login1'] = 'Значение переменной 1';
$_['error_login2'] = 'Значение переменной 2';
      ]]></add>
    </operation>

Это особенно удобно когда надо переопределить несколько переменных... всё выполняется в одной операции.

  • +1 2

Share this post


Link to post
Share on other sites
4 часа назад, Yesvik сказал:

заведомо большим offset,

Даже если переменой нет, то она появится

Share this post


Link to post
Share on other sites
30 минут назад, chukcha сказал:

Даже если переменой нет, то она появится

Мне нужно чтобы были языковые переменные с определёнными значениями... мне монопенисуально были переменные или нет, главное что после модификатора переменные будут.

Share this post


Link to post
Share on other sites

Всем спасибо за ответы, перепробовал куча вариантов, думал почему лыжи не едут, оказывается нет такого функционала в ocmod :)

 

13 часов назад, chukcha сказал:

Частный случай 2

<operation>

<search><![CDATA[$_['error_login']]]></search>

<add position="replace"><![CDATA[ $_['error_login'] = 'Неправильно заполнены поле E-Mail или Телефон и пароль!'; // ]]></add>

</operation>

Именно к такой конструкции кода я пришел перебором разных вариантов, работает, но мне показалось это такой костыль :) , комментировать через ocmod часть старого кода которую не получилось полностью заменить. В примерах других разработчиков никогда такого не встречал.

 

10 часов назад, Tom сказал:

Только почему не применить свою языковую переменную и не париться с заменой? 

Да я хотел ввести новую переменную, но тогда придется вносить изменения в шаблон нескольких местах, что очень не хотелось бы. 

 

Переопределение переменной для меня будет самым верным решением в данном случае.

Share this post


Link to post
Share on other sites

В качестве примера

<file path="catalog/controller/{*,extension/module}/{category,product,search,special,manufacturer,latest,featured,bestseller}.php">
      <operation>
          <search><![CDATA[
                Одинаковая переменная в нескольких файлах
               ]]></search>
           <add position="after"><![CDATA[
                Ваше новое значение
           ]]></add>
      </operation>
 </file>

 

Share this post


Link to post
Share on other sites

Насколько я понял ocmod реплейсит именно искомое значение 

$_['error_login']

А не всю строку в которой есть совпадение.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Similar Content

    • By SergeTkach
      Есть файл: catalog/controller/product/product.php
      В нем есть строка: if ($product_info) {
      Я после нее вставляю свой код.
       
      Проблема в том, что есть модули, которые перелопачивают файл catalog/controller/product/product.php
      И выходит, что "if ($product_info) {" может встречаться уже 2 раза. Поэтому на всякий случай ставлю index="0", чтобы вклиниваться только в метод index()
       
      <file path="catalog/controller/product/product.php"> <!-- for NO CONFLICT with quoteProduct() index 0 --> <operation> <search index="0"><![CDATA[ if ($product_info) { ]]></search> <add position="after"><![CDATA[ // Customize . Begin //... // Customize . End ]]></add> </operation> </file>  
      В OpenCart 3 если строка "if ($product_info) {" встречается только 1 раз, то этот самый index="0" не отрабатывает. В 2.3 вроде все работает. Встречался ли кто с подобным поведением? Какие варианты выхода из ситуации?
    • By martovytskyi
      Всем привет. Прошу подсказать как вывести количество товаров, которые находятся в сравнении (счетчик) на главную. Возможно есть уже готовое решение? В гугле не нашел
       
    • By SergeyPechenyuk
      Скачать/Купить дополнение


      OC-Store: OCMOD Hack (Opencart 2.x)
      Хак для Opencart 2.x, который добавляет функционал применения модификаций по версии Opencart в OCMOD.
      Для примера, в Opencart 2.1.x в системной библиотеке language.php есть такой замечательный метод all(), который отдает все значения языкового файла, но данного метода нет в Opencart 2.0.x. Вот тут нам и может помочь этот модуль, который вводит для XML-тега "operation" два новых аттрибута:
      min-version - минимальная версия Opencart, для которой применяется данная модификация
      max-version - максимальная версия Opencart, для которой применяется данная модификация

      Пример Вашего файла install.xml, который вносит изменения в системную библиотеку language.php, чтобы был доступен метод all() на Opencart 2.0.x
      <?xml version="1.0" encoding="utf-8"?><modification> <name>Add language method all() for Opencart 2.0.x</name> <version>1.0</version> <author>Sergey Pechenyuk (http://oc-store.com)</author> <code>language_method_add</code> <file path="system/library/language.php"> <operation min-version="2.0.0" max-version="2.0.3.1"> <search trim="true"><![CDATA[public function load($filename) {]]></search> <add position="before" trim="true"><![CDATA[ public function all() { return $this->data; } ]]></add> </operation> </file></modification>
      Добавил SergeyPechenyuk Добавлено 24.02.2016 Категория Прочее Системные требования Метод активации Ioncube Loader OpenCart ocStore OpenCart.Pro, ocShop Обращение к серверу разработчика  
    • By Waha
      Скачать/Купить дополнение


      Мультиязычный заголовок - модуль Рекомендуемые
      Данная модификация добавляет возможность в модуле Рекомендуемые задавать произвольный заголовок для каждого языка.
      При смене языка покупателем - заголовок модуля выводиться из настроек, если заголовок не задан, то выводиться заголовок по-умолчанию из языкового файла.
      Вся прелесть в том, что можно публиковать множество таких модулей с разным заголовком и разными товарами.
      Enjoy !
       
      Также рекомендую:
      - СМС уведомления для админа, клиента
      - Акционные товары с таймером
      - Товары из категорий
      - Все товары магазина
      Добавил Waha Добавлено 23.02.2016 Категория SEO, карта сайта, оптимизация Системные требования Сайт разработчика https://oc-help.com Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 2.3
      2.2
      2.1 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х Обращение к серверу разработчика  
    • By pashast
      Скачать/Купить дополнение


      Карта Украины в админке ocmod
      Отображает в админке ocstore 2.x карту Украины, вместо карты мира. Установка ocmod через установку дополнений.

      Тем у кого не работает, проверьте коды регионов https://opencartforum.com/topic/57219-карта-украины-в-админке-ocmod/?do=findComment&comment=554231
      Добавил pashast Добавлено 19.02.2016 Категория Прочее Системные требования Метод активации Ioncube Loader OpenCart ocStore OpenCart.Pro, ocShop Обращение к серверу разработчика  
  • Recently Browsing   0 members

    No registered users viewing this page.

×

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.