Перейти к содержанию
PREDATORik

[Решено] Warning: sprintf(): Too few arguments in

Рекомендуемые сообщения

поставил немецкий перевод. в конце заказа пишет такое вот:

Warning: sprintf(): Too few arguments in /var/www/vh16897/data/www/dikker.org.ua/catalog/controller/checkout/success.php on line 55

как решить проблему? спасибо.

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Добавить недостающие аргументы или удалить лишние спецификаторы в форматной строке.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте! У меня такая же проблема, но к сожалению ответ для меня не понятен, я конечно пробовал через яндекс узнавать что такое форматная строка, аргументы и спецификаторы, но там не очень приминимо к опенкарт объясняют, а можно поподробней уточнить как ее решить? Спасибо, буду ждать ответа!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте! У меня такая же проблема, но к сожалению ответ для меня не понятен, я конечно пробовал через яндекс узнавать что такое форматная строка, аргументы и спецификаторы, но там не очень приминимо к опенкарт объясняют, а можно поподробней уточнить как ее решить? Спасибо, буду ждать ответа!

Думаю по ссылке на русском достаточно подробно написано.

http://php.net/manual/ru/function.sprintf.php

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

$format '%d обезьян сидят на %s';

printf($format$num$location);

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

Вместо процентов с буквами подставляются значения этих двух последующих аргументов. Если будет третья запятая и значение после него (либо просто запятая вызовет ошибку много аргументов. Если будет только одна запятая с одним аргументом, то вызовет ту ошибку, которая написана вначале. Т.е. слишком мало аргументов для заданной строки. Две неизвестные, но одно значение для подстановки.

  • +1 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

поставил немецкий перевод. в конце заказа пишет такое вот:

Warning: sprintf(): Too few arguments in /var/www/vh16897/data/www/dikker.org.ua/catalog/controller/checkout/success.php on line 55

как решить проблему? спасибо.

 

Скорее всего проблема в файле catalog\language\russian\checkout\success.php. Ошибка в немецком тексте.

 

Попробуйте убрать из текста переменные с %. Но учтите, что в тексте на странице будет выводиться стандартный текст без динамических данных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Та же ошибка.
Выдается после завершения оформления заказа.
Warning: sprintf() [function.sprintf]: Too few arguments in /home/имя_базы/мой-сайт.ru/www/catalog/controller/checkout/success.php on line 58

Фрагмент кода:
if ($this->customer->isLogged()) {
$this->data['text_message'] = sprintf($this->language->get('text_customer'),
$this->url->link('account/account', '', 'SSL'),
$this->url->link('account/order', '', 'SSL'),
$this->url->link('account/download', '', 'SSL'),
$this->url->link('information/contact'));                                                      //строка 58
} else {
$this->data['text_message'] = sprintf($this->language->get('text_guest'),
$this->url->link('information/contact'));
}

Где искать?
Подскажите, кто разобрался...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Покажите содержимое переменной $_['text_customer'] в catalog/language/{Нужный_язык}/checkout/success.php

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Та же ошибка.

Выдается после завершения оформления заказа.

Warning: sprintf() [function.sprintf]: Too few arguments in /home/имя_базы/мой-сайт.ru/www/catalog/controller/checkout/success.php on line 58

Фрагмент кода:

if ($this->customer->isLogged()) {

$this->data['text_message'] = sprintf($this->language->get('text_customer'),

$this->url->link('account/account', '', 'SSL'),

$this->url->link('account/order', '', 'SSL'),

$this->url->link('account/download', '', 'SSL'),

$this->url->link('information/contact'));                                                      //строка 58

} else {

$this->data['text_message'] = sprintf($this->language->get('text_guest'),

$this->url->link('information/contact'));

}

Где искать?

Подскажите, кто разобрался...

 

Нужно открыть файл catalog/controller/checkout/success.php

  • найти кусок кода
		if ($this->customer->isLogged()) {
			$this->data['text_message'] = sprintf($this->language->get('text_customer'), $this->url->link('account/account', '', 'SSL'), $this->url->link('account/order', '', 'SSL'), $this->url->link('account/download', '', 'SSL'), $this->url->link('information/contact'));
		} else {
			$this->data['text_message'] = sprintf($this->language->get('text_guest'), $this->url->link('information/contact'));
		}

и заменить на

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

Называется - найдите одно отличие=)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно открыть файл catalog/controller/checkout/success.php

найти кусок кода

и заменить на

 

Работает, спасибо!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Была такая же ошибка, при покупке без регистрации: Warning: sprintf(): Too few arguments in /home/virtwww/w_kosmol8de_02879d1e/http/catalog/controller/checkout/success.php on line 55

Поправил как выше описано, всё чудесно заработало..

 

Но для зарегистрированного покупателя, после подтверждения покупки появляется вот такая ошибка:

           Warning: sprintf(): Too few arguments in /home/virtwww/w_kosmol8de_02879d1e/http/catalog/controller/checkout/success.php on line 53

Подскажите где, что теперь подправить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединюсь к предыдущему оратору. Подправил, как написано выше, для заказа без регистрации ошибка устранилась. А для зарегистрированного пользователя появилась:

Warning: sprintf() [function.sprintf]: Too few arguments in /home/host1371029/мойсайт.ru/htdocs/stests/catalog/controller/checkout/success.php on line 53.

Подскажите как устранить. Версия опенкарт 1.5.6.1-2

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Покажите свою строку 53

и

строку для $_['text_customer'] из файла catalog\language\russian\checkout\success.php (подразумевается, что используется русский язык).

 

Нужно либо в строку 53 добавить недостающий параметр(ы), либо в языковом файле убрать лишние плейсхолдеры %s

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот 53 строка:

$this->data['text_message'] = sprintf($this->language->get('text_customer'), $this->url->link('account/account', '', 'SSL'), $this->url->link('account/order', '', 'SSL'), $this->url->link('account/download', '', 'SSL'), $this->url->link('information/contact'));
Вот из языкового файла:
$_['text_customer'] = '<p>Ваш заказ <a href="%s">№%s</a> успешно сформирован!</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>';
После подтверждения заказа появляется страница с надписью "Ваш заказ сформирован!", а остального текста нет. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Строка в языковом файле хочет 6 параметров, а строка 53 дает ей только 4. Чтобы просто избавиться от ошибки (речь пока не идет о полной реализации "хотелки"), строку 53 замените на это:
$this->data['text_message'] = sprintf($this->language->get('text_customer'),

$this->url->link('account/account', '', 'SSL'), //Пока используется "неродная" ссылка на личный кабинет, здесь должна быть ссылка на страницу с текущим заказом
 'Номер заказа',                                //Здесь должен быть номер текущего заказа

 $this->url->link('account/account', '', 'SSL'), 
 $this->url->link('account/order', '', 'SSL'), 
 $this->url->link('account/download', '', 'SSL'), 
 $this->url->link('information/contact'));

или

 
строку в языковом файле замените на это
$_['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>';  

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Заменил строку в языковом файле, все заработало!

Спасибо за помощь!

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

Поделиться сообщением


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

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.