Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

И опять sprintf(): Too few arguments


iddqden

Recommended Posts

Сайт на OpenCart 3.0.2.0 на двух языках: английский и грузинский.

После оформления товара, при возврате на главную страницу по кнопке "Продолжить" только для грузинской версии и только для зарегистрированного пользователя выдает над шапкой: 

 

Warning: sprintf(): Too few arguments in /home/users/***/*******/domains/*******/catalog/controller/extension/module/ajaxregister.php on line 353

 

Код /module/ajaxregister.php on line 353:

public function success() {
        $this->load->language('account/success');

        $data['heading_title'] = $this->language->get('heading_title');

        if ($this->customer->isLogged()) {
            $data['text_message'] = sprintf($this->language->get('text_message'), $this->url->link('information/contact')); ---------- строка 353
        } else {
            $data['text_message'] = sprintf($this->language->get('text_approval'), $this->config->get('config_name'), $this->url->link('information/contact'));
        }

        $data['button_continue'] = $this->language->get('button_continue');

        if ($this->cart->hasProducts()) {
            $data['continue'] = $this->url->link('checkout/cart');
        } else {
            $data['continue'] = $this->url->link('account/account', '', true);
        }

        return $this->load->view('extension/module/ocajaxlogin/success', $data);
    }

Код из грузинского перевода: ajaxregister.php

// Text
$_['text_account']         = 'ანგარიში';
$_['text_register']        = 'რეგისტრაცია';
$_['text_account_already'] = 'თუ თქვენ უკვე გაქვთ ანგარიში ჩვენთან, გთხოვთ, შეხვიდეთ <a onclick="ocajaxlogin.appendLoginForm()" href="javascript:void(0); ">შესვლის ფორმა</a>.';
$_['text_your_details']    = 'თქვენი პირადი მონაცემები';
$_['text_your_address']    = 'თქვენი მისამართი';
$_['text_newsletter']      = 'ბიულეტენი';
$_['text_your_password']   = 'თქვენი პაროლი';
$_['text_agree']           = 'წაკითხული მაქვს და ვეთანხმები <a href="%s" class="agree"><b>%s</b></a>';

 

Как победить?

Змінено користувачем iddqden
Надіслати
Поділитися на інших сайтах


5 минут назад, Vetroff сказал:

не ясно что у вас в переменной  $_['text_message']

 Да вот и мне не ясно. Тоже в первую очередь на это внимание обратил. Но ведь и в англ. языке ее нет:

 

// Text
$_['text_account']         = 'Account';
$_['text_register']        = 'Register';
$_['text_account_already'] = 'If you already have an account with us, please login at the <a onclick="ocajaxlogin.appendLoginForm()" href="javascript:void(0);">login form</a>.';
$_['text_your_details']    = 'Your Personal Details';
$_['text_your_address']    = 'Your Address';
$_['text_newsletter']      = 'Newsletter';
$_['text_your_password']   = 'Your Password';
$_['text_agree']           = 'I have read and agree to the <a href="%s" class="agree"><b>%s</b></a>';

Но в англ.версии ошибку не выдает...

Надіслати
Поділитися на інших сайтах


sprintf - возвращает отформатированную строку. В твоем соучае слишком много параметров указано - 3 вместо 2-х

Описание

string sprintf (string format [, mixed args])

Пример 6. sprintf(): форматирование валюты
$money1 = 68.75;
$money2 = 54.35;
$money = $money1 + $money2;
// echo $money will output "123.1";
$formatted = sprintf("%01.2f", $money);
// echo $formatted выдаст "123.10"
Надіслати
Поділитися на інших сайтах

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

sprintf - возвращает отформатированную строку. В твоем соучае слишком много параметров указано - 3 вместо 2-х

 

И как это применить в моем случае? Где лишний параметр?

Надіслати
Поділитися на інших сайтах


значения переменных $_['text_message'] и $_['text_approval'] в файле account/success объявлены. По умолчанию в них присутствуют соответственно 1 и 2 аргумента, как и передаются в вашем файле. Но видимо вы меняли тексты и параметры для вывода в аккаунте, а в этом модуле параметры не изменили.

Открывайте языковой файл, смотрите тексты и сколько раз там встречается %s.

Также можно открыть контроллер account/success и посмотреть как там это работает

Надіслати
Поділитися на інших сайтах

функция работает примерно так

Цитата

sprintf($this->l('Unable to delete outdated AdminUpgrade tab %d'), (int)$id_tab);


     то есть делает подстанову аргумента вместо %d'

я сегодня немного тупо соображаю (перекпил) - завтра подскажу. я когда-то пил воду Нарзан прямо из источников - помогу, я вас люблю! как нас принимали - это высший класс!

Надіслати
Поділитися на інших сайтах

Только что, Blast сказал:

Также можно открыть контроллер account/success и посмотреть как там это работает

возможно нет перевода и передается булев false, поэтому функция не отрабатывает

 

Надіслати
Поділитися на інших сайтах

14 минут назад, esculapra сказал:

функция работает примерно так


     то есть делает подстанову аргумента вместо %d'

я сегодня немного тупо соображаю (перекпил) - завтра подскажу. я когда-то пил воду Нарзан прямо из источников - помогу, я вас люблю! как нас принимали - это высший класс!

 

12 минут назад, esculapra сказал:

возможно нет перевода и передается булев false, поэтому функция не отрабатывает

 

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

Тем более если бы не существовало переменной, то передавался бы не false, а запрашиваемый ключ и sprintf возвращал бы эту самую строку text_message или text_approval

Надіслати
Поділитися на інших сайтах

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

значения переменных $_['text_message'] и $_['text_approval'] в файле account/success объявлены. По умолчанию в них присутствуют соответственно 1 и 2 аргумента, как и передаются в вашем файле. Но видимо вы меняли тексты и параметры для вывода в аккаунте, а в этом модуле параметры не изменили.

Открывайте языковой файл, смотрите тексты и сколько раз там встречается %s.

Также можно открыть контроллер account/success и посмотреть как там это работает

 

В эти файлы полез почти сразу-же, т.к. наверняка справедливо заподозрил их связь с логином на аяксе.

Вот из /catalog/controller/checkout/success.php:

if ($this->customer->isLogged()) {
			$data['text_message'] = sprintf($this->language->get('text_customer'), $this->url->link('account/account', '', true), $this->url->link('account/order', '', true), $this->url->link('account/download', '', true), $this->url->link('information/contact'));
		} else {
			$data['text_message'] = sprintf($this->language->get('text_guest'), $this->url->link('information/contact'));
		}

		$data['continue'] = $this->url->link('common/home');

		$data['column_left'] = $this->load->controller('common/column_left');
		$data['column_right'] = $this->load->controller('common/column_right');
		$data['content_top'] = $this->load->controller('common/content_top');
		$data['content_bottom'] = $this->load->controller('common/content_bottom');
		$data['footer'] = $this->load->controller('common/footer');
		$data['header'] = $this->load->controller('common/header');

		$this->response->setOutput($this->load->view('common/success', $data));

И файл грузинского перевода /catalog/language/ka-GE/checkout/success.php:

 

// Text
$_['text_basket']          = 'კალათა';
$_['text_checkout']        = 'გადახდა';
$_['text_success']         = 'წარმატება';
$_['text_customer']        = '<p>თქვენი შეკვეთა წამატებით განხორციელდა!</p><p> შეგიძლიათ ნახოთ თქვენი შეკვეთების ისტორია <a href="%s">ჩემი ანგარიში</a> გვერდზე, <a href="%s">ისტორია</a> ბმულზე გადასვლით.</p><p>თუ თქვენს შენაძენს მოყვება გადმოსაწერი მასალა, თქვენ შეგიძლიათ მათი ნახვა <a href="%s">გადმოწერები</a>-ს გვერდზე.</p><p>კითვების არსებობის შემთხვევაში, მიმართეთ <a href="%s">საიტის ადმინისტრაცია</a>-ს.</p><p>მადლობას გიხდით ჩვენი ონლაინ მაღაზიით სარგებლობისთვის.</p>';
$_['text_guest']           = '<p>თქვენი შეკვეთა მიღებულია და მუშავდება!</p><p>თუ რამე კითხვები გექნებათ, გთხოვთ, მიმართეთ <a href="%s">საიტის ადმინისტრატორს</a>.</p><p>მადლობას გიხდით ჩვენი სერვისით სარგებლობისთვის!</p>';

А это из /account/success.php:

if ($this->customer->isLogged()) {
			$data['text_message'] = sprintf($this->language->get('text_message'), $this->url->link('information/contact'));
		} else {
			$data['text_message'] = sprintf($this->language->get('text_approval'), $this->config->get('config_name'), $this->url->link('information/contact'));
		}

 

Змінено користувачем iddqden
Надіслати
Поділитися на інших сайтах


19 минут назад, Blast сказал:

Посмотрите в модифицированных файлах

и не показали файл перевода account/success

 

 

Вот /account/success.php :

// Text
$_['text_message']  = '<p>თქვენი ანგარიში წარმატებით შეიქმნა!</p> <p>თქვენ ასევე შეგიძლიათ გაწევრიანეთ %s პარტნიორულ პროგრამაში.</p> <p>თუ გაქვთ რამე კითხვები ონლაინ მაღაზიის ფუნციონირებასტან დაკავშირებით, გთხოვთ, მიმართოთ საიტის ადმინისტრატორს</p> <p>დასტური მოგივათ ანგარიშზე მითითებულ ელ. ფოსტის მისამართზე. თუ არ მოგივიდათ დასტური, ერთი საათის განმავლობაში, გთხოვთ, <a href="%s">დაგიკავშირდით</a>.</p>';
$_['text_approval'] = '<p>გმადლობთ, რომ გაწევრიანდით %s პარტნიორულ პროგრამაში!</p><p>თქვენ მიიღებთ შეტყობინებას, როდესაც თქვენი ანგარში გააქტიურება საიტის ადმინისტრაციის მიერ.</p><p>თუ გაქვთ კითხვები პარტნიორული პროგრამის ფუნქციონირების შესახებ, გთხოვთ<a href="%s"> მიმართეთ საიტის ადმინისტრატორს</a>.</p>';
$_['text_account']  = 'ანგარიში';
$_['text_success']  = 'წარმატება';

В модифицированных пороюсь сейчас.

Надіслати
Поділитися на інших сайтах


Это /modification/catalog/controller/account/success.php :

if ($this->customer->isLogged()) {
			$data['text_message'] = sprintf($this->language->get('text_message'), $this->url->link('information/contact'));
		} else {
			$data['text_message'] = sprintf($this->language->get('text_approval'), $this->config->get('config_name'), $this->url->link('information/contact'));
		}

 

Надіслати
Поділитися на інших сайтах


15 минут назад, Vetroff сказал:

Ну что и требовалось доказать.

У вас в переводе text_message 2 раза встречается %s, а в контроллере 1

и при регистрации должна быть такая же ошибка

@iddqden  протестируйте

или исправляйте перевод или добавляйте еще один параметр в sprintf, соответствующий смыслу перевода

Змінено користувачем Blast
Надіслати
Поділитися на інших сайтах

Уважаемые, всем спасибо! Все совершенно верно. Косяк найден.

 

ЗЫ: А как репу-то помощникам плюсануть?

Змінено користувачем iddqden
Надіслати
Поділитися на інших сайтах


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

ЗЫ: А как репу-то помощникам плюсануть?

Напишите чуть больше сообщений, если память не изменяет минимум 10-ть. И тогда откроется такая возможность.

Надіслати
Поділитися на інших сайтах

В 22.01.2020 в 10:48, Fedka сказал:

Напишите чуть больше сообщений, если память не изменяет минимум 10-ть. И тогда откроется такая возможность.

Уважаемый, подскажите когда будет переписан модуль Модуль Экспорта товаров в Инстаграм для Opencart 2.1.x.x который  не работает как 3-год.?

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.