Jump to content

Как визуально отображать знак рубля (Лебедева), но в коде оставить руб.


chixx
 Share

Go to solution Solved by mpn2005,

Recommended Posts

Может кто-то решал такую задачу? В настройках Система-Валюта я прописываю значок рубля ₽ и в коде сайта соответственно он же выводится

<div class="us-module-price">
<span class="us-module-price-actual">233 ₽</span>
</div>

 

А я хотел бы, чтобы в коде сайта выводилось вот так

<div class="us-module-price">
<span class="us-module-price-actual">233 руб.</span>
</div>

но визуально на страницах категории и в карточке товара рядом с суммой оставался все тот же знак Лебедева - ₽

Если кто-то сталкивался, подскажите решение для Опенкарт 3. Спасибо)

Link to comment
Share on other sites

В 18.05.2024 в 17:02, chixx сказал:

Может кто-то решал такую задачу? В настройках Система-Валюта я прописываю значок рубля ₽ и в коде сайта соответственно он же выводится <div class="us-module-price"> <span class="us-module-price-actual">233 ₽</span> </div>   А я хотел бы, чтобы в коде сайта выводилось вот так <div class="us-module-price"> <span class="us-module-price-actual">233 руб.</span> </div> но визуально на страницах категории и в карточке товара рядом с суммой оставался все тот же знак Лебедева - ₽ Если кто-то сталкивался, подскажите решение для Опенкарт 3. Спасибо)

Для решения данной задачи в OpenCart 3, вам необходимо внести некоторые изменения в код шаблона вашей темы. Вот пример того, как вы можете реализовать вывод символа рубля в разных форматах в разных частях сайта:

1. Откройте файл вашей темы, в котором выводится сумма товара (например, в шаблоне category.twig или product.twig) и найдите соответствующий блок кода, отвечающий за вывод цены товара.

2. В этом блоке вам необходимо использовать условный оператор, чтобы определить, на какой странице сайта выводить символ рубля в формате "руб", а на какой оставлять символ ₽. Например:

{% if current_page == 'category' %}
  {{ price }} руб.
{% else %}
  {{ price }} ₽
{% endif %}


3. Вам также может понадобиться создать и задать значение переменной `current_page`, чтобы определить текущую страницу. Это можно сделать с помощью Javascript или PHP, в зависимости от вашей конкретной ситуации.

Это лишь общая концепция того, как можно достичь желаемого результата. Пожалуйста, убедитесь, что вносите изменения в соответствии с вашими потребностями и требованиями вашего сайта. Не забудьте сделать резервную копию файлов перед внесением изменений, чтобы избежать потери данных. Если у вас возникнут вопросы или затруднения, не стесняйтесь обращаться за дополнительной помощью.

Link to comment
Share on other sites

В 20.05.2024 в 13:19, Tom сказал:

В настройках оставить  " руб. " , скриптом подменять
 

$(document).ready(function() {
    $('body').html($('body').html().replace(/руб\./g, '₽'));
});

 

Спасибо, большое! Решение рабочее, но у меня все глючит)

Я даже попробовал чуть модифицировать, но глюки не ушли

 

Спойлер

$(document).ready(function() {
    $('body').html(function(i, html) {
        return html.replace(/руб\./g, '₽');
    });
});


Все переключалки на сайте стали глючить (при наведении на карточку товара), такие как быстрый просмотр товара, добавление в избранное, изменение цвета при наведении. Цвет при наведении не менялся, а быстрый просмотр и добавление в избранное мерцало как не в себе) Пока не справился с этой напастью)

Link to comment
Share on other sites

Да это же был просто пример для направления мысли. 
Попробуйте менять цену исключительно внутри некоего общего класса ( в опенкарт это обычно price)
 

$(document).ready(function() {
    $('.price').each(function() {
        $(this).html($(this).html().replace(/руб\./g, '₽'));
    });
});

В вашем случае используется не стандартный для вывода цены класс price а us-module-price-actual
Поэтому скрипт будет выглядеть как то так

$(document).ready(function() {
    $('.price, .us-module-price-actual').each(function() {
        $(this).html($(this).html().replace(/руб\./g, '₽'));
    });
});


Если этот способ сработает, то дальше можно сделать выбор нескольких классов. Ну например у вас в модулях, категориях итп одни общие классы, в корзине иные, на странице оформления третьи
 

$(document).ready(function() {
    $('.price, .us-module-price-actual, .another-class, .yet-another-class').each(function() {
        $(this).html($(this).html().replace(/руб\./g, '₽'));
    });
});

Где значение .another-class, .yet-another-class (через запятую) те самые иные дополнительные классы.

И даже это все лишь пальцем в небо ответ. У вас может быть цена с пересчетом при выборе опций, изменении количества, корзина и модули в модальных окнах итп. И в этом случае решение будет ещё сложнее.

Ещё один вариант , немного изменить системный файл currency.php, добавив поддержку html  для символа валюты. В настройках указать валюту в определенном классе и дальше обыграть с помощью css. Но и здесь опять таки разные мелочи типа пересчёта цены итп.

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

Link to comment
Share on other sites

  • Solution

Ещё замену можно сделать на уровне php.

В файле system/framework.php
Перед строкой:

$response->output();

 

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

if ($application_config == 'catalog') {
    $response->setOutput(str_replace(' руб.', '₽', $response->getOutput()));
}

 

Результат:

Спойлер

image.png

 

Link to comment
Share on other sites

В 26.05.2024 в 15:49, mpn2005 сказал:

Ещё замену можно сделать на уровне php.

В файле system/framework.php
Перед строкой:

$response->output();

 

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

if ($application_config == 'catalog') {
    $response->setOutput(str_replace(' руб.', '₽', $response->getOutput()));
}

 

О да! Спасибо, большое) Это гениальнейшее решение. Простое, и запустилось сразу, без танцев с бубном и вроде бы ничего не лагает) Благодарочка!

Link to comment
Share on other sites

В 26.05.2024 в 18:18, chixx сказал:

 

О да! Спасибо, большое) Это гениальнейшее решение. Простое, и запустилось сразу, без танцев с бубном и вроде бы ничего не лагает) Благодарочка!

так в этом же случае в коде, который отдается браузеру, уже будет "₽" а не "руб." вроде как

Link to comment
Share on other sites

В 26.05.2024 в 22:34, Blast сказал:

так в этом же случае в коде, который отдается браузеру, уже будет "₽" а не "руб." вроде как

Похоже на то, что-то я не сразу заметил. Потому что вот тут руб.

 

Спойлер

image.thumb.png.ac13e7fd4e7ad753e30f2046b335200a.png

 

А вот тут нет

 

Спойлер

image.png.7324dff723c37086d80101c74afa93e1.png

 

Я запутался))))

 

Получается надо как-то так?

Цитата

if ($application_config == 'catalog') {
    $output = str_replace(' руб.', '₽', $response->getOutput());
    $response->setOutput($output);
} else {
    $output = str_replace('₽', ' руб.', $response->getOutput());
    $response->setOutput($output);
}

 

Или так?

Цитата

if ($application_config == 'catalog') {
    $output = str_replace(' руб.', '₽', $response->getOutput());
    $response->setOutput($output);

}

 

Edited by chixx
Link to comment
Share on other sites

В 26.05.2024 в 23:34, Blast сказал:

так в этом же случае в коде, который отдается браузеру, уже будет "₽" а не "руб." вроде как

Да именно так. Замена будет в исходном коде страницы.

 

В 26.05.2024 в 23:40, chixx сказал:

Похоже на то, что-то я не сразу заметил. Потому что вот тут руб.

Там нет пробела перед 'руб.'
Вообще там должно быть значение цены без валюты, насколько я помню.
Похоже на какой-то жуткий хардкод.

Link to comment
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.
Note: Your post will require moderator approval before it will be visible.

Guest
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.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...