Jump to content
  • 0

Undefined index


Лелик
 Share

Question

8 answers to this question

Recommended Posts

  • 0

В опенкарт поля meta_keywords meta_description можно заполнить в админке и они записываются успешно в базу данных. Но не выводятся на странице продукта. Поэтому эти поля я решила использовать для оригинального описания товара.

В файле product папки controller сделала записи (здесь много лишних записей, так как решила испробовать всё):

1. $product_info = $this->model_catalog_product->getProduct($product_id);
        
        if ($product_info) {        
                
            $url = '';
            
            if (isset($this->request->get['meta_keywords'])) {
                $url .= '&meta_keywords=' . $this->request->get['meta_keywords'];
            }
            if (isset($this->request->get['meta_description'])) {
                $url .= '&meta_description=' . $this->request->get['meta_description'];
            }

 

2. $this->data['meta_keywords'] = html_entity_decode($product_info['meta_keywords'], ENT_QUOTES, 'UTF-8');
$this->data['meta_description'] = html_entity_decode($product_info['meta_description'], ENT_QUOTES, 'UTF-8');

3. $this->data['text_meta_keywords'] = $this->language->get('text_meta_keywords');
$this->data['text_descriptions'] = $this->language->get('text_descriptions');

4. $this->data['products'][] = array(
                    'meta_keywords' => $result['meta_keywords'],
                    'meta_description' => $result['meta_description'],

5. $this->data['descriptions'] = array();
                    
            $results = $this->model_catalog_product->getProductDescription($this->request->get['product_id']);
            
            foreach ($results as $result) {
                if ($result['meta_keywords']) {
                    $this->data['descriptions'][] = array(
                        'meta_keywords'    => $result['meta_keywords']
                    );
                    
                }
                if ($result['meta_description']) {
                    $this->data['descriptions'][] = array(
                        'meta_description'    => $result['meta_description']
                    );
                    
                }
            }

6. $this->response->setOutput($this->render(TRUE), $this->config->get('config_compression'));
        } else {
            $url = '';
            
            if (isset($this->request->get['meta_keywords'])) {
                $url .= '&meta_keywords=' . $this->request->get['meta_keywords'];
            }
            
            if (isset($this->request->get['meta_description'])) {
                $url .= '&meta_description=' . $this->request->get['meta_description'];
            }       

 7. public function review() {
       $this->data['reviews'] = array();
            
        $results = $this->model_catalog_review->getReviewsByProductId($this->request->get['product_id'], ($page - 1) * 5, 5);
              
        foreach ($results as $result) {
            $this->data['reviews'][] = array(
                'meta_keywords'    => substr($product_info['meta_keywords'],0,255),
                'meta_description'    => substr($product_info['meta_description'],0,255),

В файле product.tpl: 

1 вариант: <?php if ($descriptions) { ?>
  <?php echo $meta_keywords; ?><br /> 
  <?php echo $meta_description; ?><br />  
  <?php } ?>

2 вариант: <?php if ($descriptions) { ?>
  <?php foreach ($descriptions as $meta_keywords) { ?>
  <?php echo $meta_keywords['meta_keywords']; ?><br />  
  <?php } ?>
  <?php foreach ($descriptions as $meta_description) { ?>
  <?php echo $meta_description['meta_description']; ?><br />  
  <?php } ?>
  <?php } ?>

Поясняю, что эти поля meta_keywords meta_description встроила в самом продукте, они не для поисковика - там есть свои поисковые фразы и описания, поставленные без участия информации этих полей. 

При 2-м варианте файла tpl выводится в полях то, что нужно - но с добавлением Undefined index meta_keywords Undefined index $meta_description (сточка такая-то) в файле продукта tpl. То есть из базы эти фразы вытянуты, но чего-то не хватает - то ли файл нужно специальный где-то создавать, то ли в каком-то файле записи не хватает либо она не верна.

При 1-м варианте - выводит все корректно, но производителя в обоих полях.

Link to comment
Share on other sites

  • 0

ну а зачем вам так то))
эти поля выводятся в шапку. не в курсе как keywords - алгоритм поисковиков часто меняется и в настоящее время многие не заполняют это поле.  а вот meta_description вам нужно....  помогает поисковикам брать информацию о странице

а не выводятся в описании у вас, потому что практически у каждого шаблона при стандартном раскладе есть свой контроллер, там в переменную $this["data"] и записываются нужные переменные которые вы будете использовать в шаблоне. 
если не понятно, то уточню -  не показывается как описание у вас - потому что в контроллере product.php  у вас эти переменные не заданы, как их задать можете посмотреть в контроллере common/header.php, но если вы с php вообще никак - лучше не трогайте, а используйте стандарт

 

дочитав ваше сообщение, понял что правильный у вас 2 вариант(в контроллере).   а undefined index потому что вам нужно писать просто  $meta_description в шаблоне. без foreach

<?php if ($descriptions) {

у вас же пустое описание

 

Link to comment
Share on other sites

  • 0

в tpl

<?php if ($descriptions) { ?>  
  <?php ($descriptions as $meta_keywords) { ?>
  <?php echo $meta_keywords['meta_keywords']; ?><br />  
  <?php } ?>
  <?php ($descriptions as $meta_description) { ?>
  <?php echo $meta_description['meta_description']; ?><br />  
  <?php } ?>  
  <?php } ?>

Стала выводится совершенно пустая страница продукта - белый лист. Может, нужно было выбрать продукт с этими заполненными полями (я выбрала продукт без заполнения), но на сайте будут и с заполненными, и с незаполненными - и все должны быть видны.

Link to comment
Share on other sites

  • 0

в редакторе, если вы его не закрыли удерживайте ctrl+z - вам нужно все ваши изменения убрать. 
белый лист говорит о синтаксической ошибке в коде

а потом сделайте то что я выше написал. если не получится киньте сюда код контроллера и шаблона. 
Но под спойлером!!

Link to comment
Share on other sites

  • 0

$this->data['meta_keywords'] = $this->document->meta_keywords;
$this->data['meta_description'] = $this->document->meta_description;

php - вот так?

А tpl - единственный вариант без белого листа, но там ошибка: 

<?php if ($descriptions) { ?>  
  <?php echo $meta_keywords['meta_keywords']; ?><br />  
  <?php echo $meta_description['meta_description']; ?><br />  
  <?php } ?>

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

Warning: Illegal string offset 'meta_keywords' in /sites/.../product.tpl on line...
Warning: Illegal string offset 'meta_description' in /sites/.../product.tpl on line...

и фразы не отображаются

Link to comment
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.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

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

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy