Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


iddqden
 Share

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>';

 

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

Edited by iddqden
Link to comment
Share on other sites


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>';

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

Link to comment
Share on other sites


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"
Link to comment
Share on other sites

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

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

 

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

Link to comment
Share on other sites


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

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

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

Link to comment
Share on other sites

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

Циии

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


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

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

Link to comment
Share on other sites

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

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

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

 

Link to comment
Share on other sites

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

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


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

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

 

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

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

 

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

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

Link to comment
Share on other sites

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'));
		}

 

Edited by iddqden
Link to comment
Share on other sites


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']  = 'წარმატება';

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

Link to comment
Share on other sites


Это /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'));
		}

 

Link to comment
Share on other sites


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

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

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

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

@iddqden  однакостируйте

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

Edited by Blast
Link to comment
Share on other sites

Уважаемые, всем спасипотому что! Все совершенно верно. Коскак найгден.

 

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

Edited by iddqden
Link to comment
Share on other sites


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

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

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

Link to comment
Share on other sites

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

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

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

Link to comment
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
 Share

×
×
  • 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.