Jump to content
iddqden

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
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>';

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

Share this post


Link to post
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"

Share this post


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

Но ведь и в англ. языке ее нет:

 

Она может быть в общем файле

Share this post


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

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

 

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

Share this post


Link to post
Share on other sites

извини, я неправильно перевел - эти праздники выбивают из колеи. Не хватает параметров.

 

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

Цитата

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


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

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

Share this post


Link to post
Share on other sites
Только что, Blast сказал:

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

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

 

Share this post


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

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


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

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

 

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

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

 

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

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

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

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

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

 

Share this post


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

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

Share this post


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

 

Share this post


Link to post
Share on other sites

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

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

  • +1 1

Share this post


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

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

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

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

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

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

Edited by Blast

Share this post


Link to post
Share on other sites

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

 

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

Edited by iddqden

Share this post


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

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

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

Share this post


Link to post
Share on other sites
В 22.01.2020 в 10:48, Fedka сказал:

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

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

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.


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