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

[Решено] Не выводится переменные по циклу for

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

Здравствуйте.

Opencart: 3.0.2.0

 

Новенький в MVC. Очень прошу помочь мне с кодом в котроллере, целый день потратил и могу вывести значения под для каждого товара.

 

1) Доавил в таблицу "Product" 4 столбца

2) Добавил в админ панеле новый таб

   Хочу вывести данные из ДБ в новый ТАБ

При нажатии на действия изменить какого то товара, переходит на ссылку "catalog/product/edit"

1) Захожу в "model/catalog/product/product.php/" и создаю новую функцию, что бы выбрать столбцы

public function getKreditdata($product_id)
{	
	$query = $this->db->query("select product_id,kredit_status, kredit_ay, kredit_faiz, kredit_min_ilkin from " . DB_PREFIX . "product where product_id = '".$product_id."' ");
	
	return $query->rows;
}

2) Захожу в "controller/catalog/product/product.php" перехожу к функции "edit" и добавляю тут код что бы передать данные в twig(мне кажется тут у меня ошибка)

$data['kreditdata'] = $this->model_catalog_product->getKreditdata($this->request->get['product_id']);

3) Вывожу в "view/template/catalog/product_form.php" циклом FOR, но ничего не выводится. 

{% for kredata in kreditdata %}

//например для теста вывожу
	{{ kredata.kredit_status ]}

{% endfor %}

 

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


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

В контрллере массив не пуст этот ?

$data['kreditdata']

Кеш твига чистите? Или отключен на время разработки?

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


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

@Prorab337 Спасибо за ответ и помощь

 

4 минуты назад, Prorab337 сказал:

Кеш твига чистите? Или отключен на время разработки?

Да, постоянно, уже в привычку вошло) Не отключен на время разработки, а нужно включить?

4 минуты назад, Prorab337 сказал:

В контрллере массив не пуст этот ?

 

Делаю var_dump($data['kreditdata']) в контроллере и для каждого товара выводится привильно

 

 

 

Изменено пользователем Orkh3ll0

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


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

Выборка ОДНОГО товара, но возвращаешь МАССИВ СТРОК ($query->rows), а не одну строку ($query->row), как следовало бы.

Поэтому массив есть, но перебираешь неправильно.

 

Так что либо возвращай из модели только одну строку, либо переделывай перебор массива.

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


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

@afwollis в моделе, можете увидеть что я возвращаю ($query->rows). Проблема в том что, вообще не работает, даже 1 строку не возвращает. в Цикл for не заходит, думаю массив в контроллере не там вставляю, не знаю куда вставить, что бы правильно выводил все данные. var _dump работает и все правильно показывает, но при выводе в for, не работает

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


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

@Orkh3ll0 , менял в модели $query->rows на $query->row? Что получил?

 

Не менял?  МЕНЯЙ.

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


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

@afwollis все оставил как есть и в моделе в функции поменял  $query->rows на $query->row , но все одно и тоже, не заходит в цикл FOR, но var_dump($data['kreditdata'])   все правильно выводит. Вот пример:  "array(5) { ["product_id"]=> string(2) "60" ["kredit_status"]=> string(1) "1" ["kredit_ay"]=> string(2) "18" ["kredit_faiz"]=> string(5) "5.000" ["kredit_min_ilkin"]=> string(6) "99.000" }"

 

public function getKreditdata($product_id)
{	
	$query = $this->db->query("select product_id,kredit_status, kredit_ay, kredit_faiz, kredit_min_ilkin from " . DB_PREFIX . "product where product_id = '".$product_id."' ");
	
	return $query->row;
}

 

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


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

теперь выводи просто так

{{ kreditdata.kredit_status }}

без цикла.

 

- - -

не досмотрел в первом сообщении:

квадратная скобка в конце вместо фигурной - опечатка тут или прям в коде?

{{ kredata.kredit_status ]}

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


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

@afwollis Сделал как вы сказали

 

6 минут назад, afwollis сказал:

теперь выводи просто так


{{ kreditdata.kredit_status }}

без цикла.

 

Сделал, ничего не вывелось. Я новенький, но мне кажется только в цикле можно такое вывести {{ kreditdata.kredit_status }}, а если было бы просто {{ kredit_status }}, то вывелось бы, я прав?

 

6 минут назад, afwollis сказал:

{{ kredata.kredit_status ]}

это опечатка, в коде все правильно

Изменено пользователем Orkh3ll0

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


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

...надо высыпаться...

 

проблема у тебя там, где ты предполагал.

edit() - лишь обработка отправки данных из формы.

 

сама форма и данные собираются в getForm().

Спойлер


там, перед


		$data['header'] = $this->load->controller('common/header');

добавляй


		if (isset($this->request->post['kredit_status'])) {
			$data['kredit_status'] = $this->request->post['kredit_status'];
		} elseif (!empty($product_info)) {
			$data['kredit_status'] = $product_info['kredit_status'];
		} else {
			$data['kredit_status'] = array();
		}
		
		if (isset($this->request->post['kredit_ay'])) {
			$data['kredit_ay'] = $this->request->post['kredit_ay'];
		} elseif (!empty($product_info)) {
			$data['kredit_ay'] = $product_info['kredit_ay'];
		} else {
			$data['kredit_ay'] = array();
		}
		
		if (isset($this->request->post['kredit_faiz'])) {
			$data['kredit_faiz'] = $this->request->post['kredit_faiz'];
		} elseif (!empty($product_info)) {
			$data['kredit_faiz'] = $product_info['kredit_faiz'];
		} else {
			$data['kredit_faiz'] = array();
		}
		
		if (isset($this->request->post['kredit_min_ilkin'])) {
			$data['kredit_min_ilkin'] = $this->request->post['kredit_min_ilkin'];
		} elseif (!empty($product_info)) {
			$data['kredit_min_ilkin'] = $product_info['kredit_min_ilkin'];
		} else {
			$data['kredit_min_ilkin'] = array();
		}

 

в шаблоне - просто


{{ kredit_status }}
{{ kredit_ay }}
{{ kredit_faiz }}
{{ kredit_min_ilkin }}


 

 

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


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

@afwollis нашел решение. Как и предполагал, проблема была в контроллере, не туда вписал код. Этот код массива

$data['kreditdata'] = $this->model_catalog_product->getKreditdata($this->request->get['product_id']);

не нужно было просто в edit функцию вписать. Нужно было в функцию  getForm() вписать, так как функция edit() возвращал функцию getForm. Вставил и без FOR цикла все вывелось. 

Отдельное и большое спасибо, за то что хотели помочь и помогли.

 

Тему можно закрыть. Спасибо

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


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

@afwollis

2 минуты назад, afwollis сказал:

проблема у тебя там, где ты предполагал.

edit() - лишь обработка отправки данных из формы.

 

сама форма и данные собираются в getForm().

Нашли вместе, но вы лучше, так как у вас нету моих кодов под рукой) Спасибо большое)

Изменено пользователем Orkh3ll0

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


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

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

Поэтому лучше возьми мой код, так как нет смысла гонять лишние запросы для получения данных из таблицы product, ибо они все и так уже есть в "$product_info"

		if (isset($this->request->get['product_id']) && ($this->request->server['REQUEST_METHOD'] != 'POST')) {
			$product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']);
		}

 

Да и с точки зрения кода opencart этот вариант правильный.

 

Успехов в дальнейшем освоении.

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


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

@afwollis

16 минут назад, afwollis сказал:

if (isset($this->request->get['product_id']) && ($this->request->server['REQUEST_METHOD'] != 'POST')) { $product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']); }

Вы правы сделал что и посоветовали. Убрал остальные и добавил код то что снизу и все работает. Спасибо

 

if (isset($this->request->post['kreditdata'])) {
	$data['kreditdata'] = $this->request->post['kreditdata'];
} elseif (isset($this->request->get['product_id'])) {
	$data['kreditdata'] = $this->model_catalog_product->getKreditdata($this->request->get['product_id']);
} else {
	$data['kreditdata'] = array();
}

 

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


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

дыру безопасности в запросе в модели исправьте. кто знает что будет передано в get/post строке переменной product_id. в запросе приведение типов сделайте до int. и не забывайте это делать в каждом запросе, либо (int)$product_id, либо $this->db->escape($product_id), никогда не доверяйте полученным данным.

Изменено пользователем lexxkrt

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

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

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

×

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

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