Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

Передать значение переменной.


Recommended Posts

Добрый вечер. Подскажите, как протащить <?php echo $review['author']; ?> из review.tpl в product.tpl. Пробовал разные варианты, ничего не выходит. 

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

Пробовал разные варианты, ничего не выходит.

это хорошо бы написать))

 

Link to post
Share on other sites

Я так понял, что сюда залетают отзывы:

		$results = $this->model_catalog_review->getReviewsByProductId($this->request->get['product_id'], ($page - 1) * 5, 5);

		foreach ($results as $result) {
			$data['reviews'][] = array(
				'author'     => $result['author'],
				'text'       => nl2br($result['text']),
				'rating'     => (int)$result['rating'],
				'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))
			);
		}

Как их передать в product.tpl? 

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

Как их передать в product.tpl? 

заявить контроллер product.php в модели ревью, потом вывести для отображения в product.tpl. Может кто подскажет проще вариант, но мне кажется, это самый простой, без создания никаких доп запросов.

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

Я так понял, что сюда залетают отзывы:


		$results = $this->model_catalog_review->getReviewsByProductId($this->request->get['product_id'], ($page - 1) * 5, 5);

		foreach ($results as $result) {
			$data['reviews'][] = array(
				'author'     => $result['author'],
				'text'       => nl2br($result['text']),
				'rating'     => (int)$result['rating'],
				'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))
			);
		}

Как их передать в product.tpl? 

скажи, что конкретно нужно на примере пользователя, может не переменная нужна

 

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

Я так понял, что сюда залетают отзывы:


		$results = $this->model_catalog_review->getReviewsByProductId($this->request->get['product_id'], ($page - 1) * 5, 5);

		foreach ($results as $result) {
			$data['reviews'][] = array(
				'author'     => $result['author'],
				'text'       => nl2br($result['text']),
				'rating'     => (int)$result['rating'],
				'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))
			);
		}

Как их передать в product.tpl? 

Вставьте ваш код в product.php до загрузки шаблона

$this->response->setOutput($this->load->view('product/product', $data));

И перед вашим кодом нужно еще вызвать модель

$this->load->model('catalog/review');
Link to post
Share on other sites
3 минуты назад, pashast сказал:

Вставьте ваш код в product.php до загрузки шаблона


$this->response->setOutput($this->load->view('product/product', $data));

И перед вашим кодом нужно еще вызвать модель


$this->load->model('catalog/review');

ну в принципе да, только примером )) 

Link to post
Share on other sites
В 22.12.2018 в 21:38, pashast сказал:

Вставьте ваш код в product.php до загрузки шаблона


$this->response->setOutput($this->load->view('product/product', $data));

И перед вашим кодом нужно еще вызвать модель


$this->load->model('catalog/review');

Да это все присутствует в контроллере по дефолту. 

public function review() {
		$this->load->language('product/product');

		$this->load->model('catalog/review');

		$data['text_no_reviews'] = $this->language->get('text_no_reviews');

		if (isset($this->request->get['page'])) {
			$page = $this->request->get['page'];
		} else {
			$page = 1;
		}

		$data['reviews'] = array();

		$review_total = $this->model_catalog_review->getTotalReviewsByProductId($this->request->get['product_id']);

		
		$results = $this->model_catalog_review->getReviewsByProductId($this->request->get['product_id'], ($page - 1) * 5, 5);

		foreach ($results as $result) {
			$data['reviews'][] = array(
				'author'     => $result['author'],
				'text'       => nl2br($result['text']),
				'rating'     => (int)$result['rating'],
				'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))
			);
		}
        
		$pagination = new Pagination();
		$pagination->total = $review_total;
		$pagination->page = $page;
		$pagination->limit = 5;
		$pagination->url = $this->url->link('product/product/review', 'product_id=' . $this->request->get['product_id'] . '&page={page}');

		$data['pagination'] = $pagination->render();

		$data['results'] = sprintf($this->language->get('text_pagination'), ($review_total) ? (($page - 1) * 5) + 1 : 0, ((($page - 1) * 5) > ($review_total - 5)) ? $review_total : ((($page - 1) * 5) + 5), $review_total, ceil($review_total / 5));

		$this->response->setOutput($this->load->view('product/review', $data));
	}

 

Link to post
Share on other sites

Ну так вы же привели код метода review(), и шаблон там product/review.tpl

 

А вам нужно получить переменную в шаблоне product/product.tpl значит надо код писать в метод index()

Link to post
Share on other sites
В 22.12.2018 в 21:38, pashast сказал:

Вставьте ваш код в product.php до загрузки шаблона


$this->response->setOutput($this->load->view('product/product', $data));

И перед вашим кодом нужно еще вызвать модель


$this->load->model('catalog/review');

Да это все присутствует в контроллере по дефолту. 

public function review() {
		$this->load->language('product/product');

		$this->load->model('catalog/review');

		$data['text_no_reviews'] = $this->language->get('text_no_reviews');

		if (isset($this->request->get['page'])) {
			$page = $this->request->get['page'];
		} else {
			$page = 1;
		}

		$data['reviews'] = array();

		$review_total = $this->model_catalog_review->getTotalReviewsByProductId($this->request->get['product_id']);

		
		$results = $this->model_catalog_review->getReviewsByProductId($this->request->get['product_id'], ($page - 1) * 5, 5);

		foreach ($results as $result) {
			$data['reviews'][] = array(
				'author'     => $result['author'],
				'text'       => nl2br($result['text']),
				'rating'     => (int)$result['rating'],
				'date_added' => date($this->language->get('date_format_short'), strtotime($result['date_added']))
			);
		}
        
		$pagination = new Pagination();
		$pagination->total = $review_total;
		$pagination->page = $page;
		$pagination->limit = 5;
		$pagination->url = $this->url->link('product/product/review', 'product_id=' . $this->request->get['product_id'] . '&page={page}');

		$data['pagination'] = $pagination->render();

		$data['results'] = sprintf($this->language->get('text_pagination'), ($review_total) ? (($page - 1) * 5) + 1 : 0, ((($page - 1) * 5) > ($review_total - 5)) ? $review_total : ((($page - 1) * 5) + 5), $review_total, ceil($review_total / 5));

		$this->response->setOutput($this->load->view('product/review', $data));
	}

Спасибо, буду пробовать.

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
  • Similar Content

    • By DenKuzmin
      Как вывести подкатегории 3го уровня в osstore 2.3?
      На сайте установлен модуль для вывода категорий "Категории_KSL". Помогите, пожалуйста, его переписать, чтобы можно было выводить категории 3го уровня.
       
       
    • By Denys
      Добрый день, нужен бесстрашный специалист для доработки и исправления ошибок в ocStore 2.3.0.2.3
      В карте сайта для контента на русском языке исправить вывод ссылки (добавить ru/ после домена) В модуле генератора фидов для контента на русском языке исправить вывод ссылки (добавить ru/ после домена) Убрать вывод дублей постов с категорией в карте сайта блога, продублировать ссылки с ru/ Исправить чпу для пагинации, тегов и сортировки Настроить корректную передачу целей/событий в расширенную эл.коммерцию гугл аналитикс Подробнное ТЗ тут https://docs.google.com/document/d/13SdbXH3r7weAnsWb4Jq-CzXjcCE_hzhnAeZzcSSZX6k/edit?usp=sharing
      Важно! При работе не в коем случае не переключать движок чпу с СЕО ПРО на стандартный.
      Задачи не сложные, думаю за день можно справится не напрягаясь для опытного разработчика.
      Ставить модули не предлагать.
      По окончанию работы предоставить список затронутых файлов.
      Жду ваши предложения.
    • By kairos
      Приветствую форумчане. Такая проблема, пытаюсь выполнить ajax запрос, суть которого отправить некоторые данные с домена: a.com на b.com и соответственно получить ответ от b.com с целью дальнейшей его обработки в скрипте на a.com
      Оба домена находятся на OpenServer на локальной машине, то есть у меня есть контроль над http://b.com/ и я могу прописать в php файле необходимые настройки.
      Однако при попытке выполнить ajax запрос получаю ошибку:

      jquery-3.6.0.min.js:2 Cross-Origin Read Blocking (CORB) blocked cross-origin response http://b.com/?callback=jQuery360001053556176974424_1630579545897&_=1630579545898 with MIME type application/json. See https://www.chromestatus.com/feature/5629709824032768 for more details.
       
      Аналогичную ситуацию имею на хостинге уже на реальных доменах. 
      При этом данные c a.com на b.com в php скрипт все же попадают, однако, мне не удается добиться чтения ответа на домене a.com.
      Что характерно в сети есть по меньшей мере один домен с которого таки удается получить данные таким способом.
      Если вместо b.com подставить страницу:
      https://jsonplaceholder.typicode.com/todos/1
      то в этом случае получаю ответ:
      {userId: 1, id: 1, title: "delectus aut autem", completed: false}
      Однако же добиться аналогичного эффекта на домене под собственным контролем я не могу.
       
      Пробовал в js указывать crossDomain: true, на стороне php пробовал указывать различные заголовки по типу:
      header('content-type: application/json');
      и тому подобное... пробовал даже скопировать из браузера заголовки которые отдает
      сайт https://jsonplaceholder.typicode.com/todos/1 и подставить их в php файл через тот же header() однако ничего не выходит.
      Подскажите куда копать? Вопрос вроде плевый, но сколько не пытаюсь ничего не получается.

      Ниже код js:

       
      <script> //Первый вариант на jQuery: $(document).ready(function(){ $.ajax({ url: "http://b.com", crossDomain: true, dataType: "jsonp", success: function( response ) { console.log(response); } }); }); </script> <script> //Второй вариант на чистом js: function receiver(data){ console.log(data); } </script> <script src="http://b.com/?callback=receiver"></script> код php:

       
      <?php header('content-type: application/json'); header('Access-Control-Allow-Origin: http://a.com'); header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE'); echo '{"foo":"bar"}'; ?>  
    • By ocbot
      Подскажите лучший способ как c помощью php спарсить кусок кода, отвечающий за вывод блока товара, из файла шаблона product/category.twig
      По идее, нужно спарсить все что находится внутри цикла {% for product in products %} и записать этот код в отдельный файл, чтобы потом подключать его через include в других шаблонах.
      Изначально получаю код файла и записыю в переменную:
      $content = file_get_contents(DIR_CATALOG . 'view/theme/'.$this->config->get('config_theme').'/template/product/category.twig');
      А дальше регулярку писать или есть другие варианты? Если регулярка, то помогите составить выражение.
      Спасибо всем, кто отзовется!
    • By Alexandr15
      Подскажите пожалуйста как в opencart 3 в стандартном (базовом) модуле featured вывести опции товаров
      В файл: modification\catalog\controller\extension\module\featured.php
      добавил код:
      $options = array(); foreach ($this->model_catalog_product->getProductOptions($result['product_id']) as $option) { if($option['required']){ $product_option_value_data = array(); foreach ($option['product_option_value'] as $option_value) { if (!$option_value['subtract'] || ($option_value['quantity'] >= 0)) { $product_option_value_data[] = array( 'product_option_value_id' => $option_value['product_option_value_id'], 'option_value_id' => $option_value['option_value_id'], 'name' => $option_value['name'], 'image' => $this->model_tool_image->resize($option_value['image'], 50, 50), 'quantity' => $option_value['quantity'], 'price_prefix' => $option_value['price_prefix'] ); } } $options[] = array( 'product_option_id' => $option['product_option_id'], 'product_option_value' => $product_option_value_data, 'option_id' => $option['option_id'], 'name' => $option['name'], 'type' => $option['type'], 'value' => $option['value'], 'required' => $option['required'] ); } } Также в $data['products'][] = array(
      добавил:
      'options' => $options, Для вывода в файле: template\extension\module\featured.twig
      в карточку товара добавил код:
      {% if product.options %} {% for option in product.options %} {% if option.type == 'radio' %} <div class="groupOptionWrap {% if option.required %} required {% endif %}"> <div id="input-option{{ option.product_option_id }}" class='groupOptionElements'> {% for option_value in option.product_option_value %} {% if option_value.quantity == "0" %} <div class="groupOption groupOptionDisable"> {{ option_value.name }} </div> {% else %} <div class="groupOption"> {{ option_value.name }} </div> {% endif %} {% endfor %} </div> </div> {% endif %} {% endfor %} {% endif %} Но это не сработало, просьба подсказать, если кто знает рабочий вариант
      Весь код данного модуля:
      <?php class ControllerExtensionModuleFeatured extends Controller { public function index($setting) { $this->load->language('extension/module/notify_when_available'); $data['text_out_of_stock'] = $this->language->get('text_out_of_stock'); $data['out_of_stock_show'] = $this->config->get('module_notify_when_available_stock'); $data['out_of_stock_notify'] = $this->config->get('module_notify_when_available_notify'); $this->load->language('extension/module/featured'); $this->load->model('catalog/product'); $this->load->model('tool/image'); $data['products'] = array(); if (!$setting['limit']) { $setting['limit'] = 4; } if (!empty($setting['product'])) { $lang = $this->config->get('config_language_id'); $title = isset($setting['titles']['title'.$lang]) && $setting['titles']['title'.$lang] ? $setting['titles']['title'.$lang] : ''; if (isset($title) && $title) { $data['heading_title'] = $title; } if (isset($setting['shuffle']) && $setting['shuffle']) { shuffle($setting['product']); } $products = array_slice($setting['product'], 0, (int)$setting['limit']); foreach ($products as $product_id) { $product_info = $this->model_catalog_product->getProduct($product_id); if ($product_info) { if ($product_info['image']) { $image = $this->model_tool_image->resize($product_info['image'], $setting['width'], $setting['height']); } else { $image = $this->model_tool_image->resize('placeholder.png', $setting['width'], $setting['height']); } if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) { $price = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']); $data['priceInt'] = $this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')); } else { $price = false; } $specialSavings =0; if ((float)$product_info['special']) { $special = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']); $data['specialInt'] = $this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')); $data['specialSavings'] = round((($data['priceInt']-$data['specialInt'])/$data['priceInt'])*100, 2); $specialSavings = $data['specialSavings']; } else { $special = false; } if ($this->config->get('config_tax')) { $tax = $this->currency->format((float)$product_info['special'] ? $product_info['special'] : $product_info['price'], $this->session->data['currency']); } else { $tax = false; } if ($this->config->get('config_review_status')) { $rating = $product_info['rating']; } else { $rating = false; } $options = array(); foreach ($this->model_catalog_product->getProductOptions($result['product_id']) as $option) { if($option['required']){ $product_option_value_data = array(); foreach ($option['product_option_value'] as $option_value) { if (!$option_value['subtract'] || ($option_value['quantity'] >= 0)) { $product_option_value_data[] = array( 'product_option_value_id' => $option_value['product_option_value_id'], 'option_value_id' => $option_value['option_value_id'], 'name' => $option_value['name'], 'image' => $this->model_tool_image->resize($option_value['image'], 50, 50), 'quantity' => $option_value['quantity'], 'price_prefix' => $option_value['price_prefix'] ); } } $options[] = array( 'product_option_id' => $option['product_option_id'], 'product_option_value' => $product_option_value_data, 'option_id' => $option['option_id'], 'name' => $option['name'], 'type' => $option['type'], 'value' => $option['value'], 'required' => $option['required'] ); } } $data['products'][] = array( 'product_id' => $product_info['product_id'], 'quantity' => $result['quantity'], 'quantity' => $product_info['quantity'], 'quantity' => isset($result['quantity']) ? $result['quantity'] : (isset($product_info['quantity']) ? $product_info['quantity'] : 1), 'attribute_groups' => $this->model_catalog_product->getProductAttributes($product_info['product_id']), 'thumb' => $image, 'name' => $product_info['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'specialSavings' => $specialSavings, 'tax' => $tax, 'rating' => $rating, 'options' => $options, 'href' => $this->url->link('product/product', 'product_id=' . $product_info['product_id']) );  
       
  • 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.