Jump to content
покупайте без комиссии
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

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


Recommended Posts

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

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 %}

 

Link to post
Share on other sites

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

 

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

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

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

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

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

 

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

 

 

 

Edited by Orkh3ll0
Link to post
Share on other sites

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

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

 

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

Link to post
Share on other sites

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

Link to post
Share on other sites

@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;
}

 

Link to post
Share on other sites

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

{{ kreditdata.kredit_status }}

без цикла.

 

- - -

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

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

{{ kredata.kredit_status ]}
Link to post
Share on other sites

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

 

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

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


{{ kreditdata.kredit_status }}

без цикла.

 

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

 

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

{{ kredata.kredit_status ]}

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

Edited by Orkh3ll0
Link to post
Share on other sites

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

 

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

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 }}


 

 

Link to post
Share on other sites

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

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

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

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

 

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

Link to post
Share on other sites

@afwollis

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

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

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

 

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

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

Edited by Orkh3ll0
Link to post
Share on other sites

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

Поэтому лучше возьми мой код, так как нет смысла гонять лишние запросы для получения данных из таблицы 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 этот вариант правильный.

 

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

Link to post
Share on other sites

@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();
}

 

Link to post
Share on other sites

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

Edited by lexxkrt
Link to post
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
  • Recently Browsing   0 members

    No registered users viewing this page.

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