Display data in product category view (from already working modification)

26 Views Asked by At

opencart 2.3.0.2, how to display data that this modification is adding but in category view (where the product list, before product price), i understand that need to add code in controller category.php model category.php and category.tpl but adding same code that come for compare or other places not working.

modification full xml code,

<modification>

    <id>additional_product</id>
    <version>1.0.0</version>
    <vqmver>2.1.5</vqmver>
    <author>ovife21</author>
    
    <file name="admin/view/template/common/menu.tpl" error="skip">
        <operation>
            <search position="after"><![CDATA[<?php echo $text_stock_status; ?>]]></search>
            <add><![CDATA[<li><a href="<?php echo $additional_product; ?>"><?php echo $text_additionalproduct; ?></a></li>]]></add>
        </operation>        
    </file> 
    
    <file name="admin/controller/common/menu.php" error="skip">
        <operation>
            <search position="after"><![CDATA[$data['text_product']]]></search>
            <add><![CDATA[$data['text_additionalproduct'] = $this->language->get('text_additionalproduct');]]></add>
        </operation>
        <operation>
            <search position="after"><![CDATA[$data['product']]]></search>
            <add><![CDATA[$data['additional_product'] = $this->url->link('localisation/additional_product', 'token=' . $this->session->data['token'], 'SSL');]]></add>
        </operation>        
    </file> 
    
    <file name="admin/language/*/common/menu.php" error="skip">
        <operation>
            <search position="after"><![CDATA[$_['text_product']]]></search>
            <add><![CDATA[$_['text_additionalproduct']                     = 'Additional Product Fields';]]></add>
        </operation>        
    </file>     
    <file name="admin/controller/common/column_left.php" error="skip">
        <operation error="skip">
            <search position="before"><![CDATA['access', 'localisation/stock_status']]></search>
            <add><![CDATA[
                        
            if ($this->user->hasPermission('access', 'localisation/additional_product')) {
                $localisation[] = array(
                    'name'     => 'Additional Product Fields',
                    'href'     => $this->url->link('localisation/additional_product', 'token=' . $this->session->data['token'], true),
                    'children' => array()   
                );
            }]]></add>
        </operation>        
    </file> 
    <file name="admin/model/catalog/product.php">
        <operation>
            <search position="before"><![CDATA[if (isset($data['product_attribute'])) {]]></search>
            <add><![CDATA[
            
            if (isset($data['product_to_field'])) {
            $this->db->query("DELETE FROM " . DB_PREFIX . "product_to_field WHERE product_id = '" . (int)$product_id . "'");
            foreach ($data['product_to_field'] as $language_id => $product_to_field) {
                foreach ($product_to_field as $additional_product_id => $product_to_field_value) {
                    
                        $dropdown_query = $this->db->query("SELECT dropdown FROM " . DB_PREFIX . "additional_product WHERE language_id = '" . (int)$this->config->get('config_language_id') . "' and additional_product_id = '" . (int)$additional_product_id . "'");
                        
                        $dropdown = $dropdown_query->row['dropdown'];
                        
                                                
                        if (!($dropdown))
                            {                               
                            $this->db->query("INSERT IGNORE INTO " . DB_PREFIX . "product_to_field SET product_id = '" . (int)$product_id . "', additional_product_id = '" . (int)$additional_product_id . "', language_id = '" . (int)$language_id . "', name = '" .  $this->db->escape($product_to_field_value['name']) . "'");
                            }
                            else {
                            $this->db->query("INSERT IGNORE INTO " . DB_PREFIX . "product_to_field SELECT '" . (int)$product_id . "', '" . (int)$additional_product_id . "', language_id, value from " . DB_PREFIX . "additional_product_value WHERE additional_product_id = '" . (int)$additional_product_id . "' and additional_product_value_id = '" .  $product_to_field_value['name'] . "'");
                            }
                    
                }
            }
        }
            
            ]]></add>
        </operation>        
        
        <operation>
            <search position="before"><![CDATA[$this->db->query("DELETE FROM " . DB_PREFIX . "product_attribute WHERE product_id = '" . (int)$product_id . "'");]]></search>
            <add><![CDATA[
            
            $this->db->query("DELETE FROM " . DB_PREFIX . "product_to_field WHERE product_id = '" . (int)$product_id . "'");
            
            if (isset($data['product_to_field'])) {
            
            foreach ($data['product_to_field'] as $language_id => $product_to_field) {
                foreach ($product_to_field as $additional_product_id => $product_to_field_value) {
                    
                        $dropdown_query = $this->db->query("SELECT dropdown FROM " . DB_PREFIX . "additional_product WHERE language_id = '" . (int)$this->config->get('config_language_id') . "' and additional_product_id = '" . (int)$additional_product_id . "'");
                        
                        $dropdown = $dropdown_query->row['dropdown'];
                        
                                                
                        if (!($dropdown))
                            {                               
                            $this->db->query("INSERT IGNORE INTO " . DB_PREFIX . "product_to_field SET product_id = '" . (int)$product_id . "', additional_product_id = '" . (int)$additional_product_id . "', language_id = '" . (int)$language_id . "', name = '" .  $this->db->escape($product_to_field_value['name']) . "'");
                            }
                            else {
                            $this->db->query("INSERT IGNORE INTO " . DB_PREFIX . "product_to_field SELECT '" . (int)$product_id . "', '" . (int)$additional_product_id . "', language_id, value from " . DB_PREFIX . "additional_product_value WHERE additional_product_id = '" . (int)$additional_product_id . "' and additional_product_value_id = '" .  $product_to_field_value['name'] . "'");
                            }
                    
                }
            }
            
            /*foreach ($data['product_to_field'] as $language_id => $product_to_field) {
                foreach ($product_to_field as $additional_product_id => $product_to_field_value) {
                                
                        $this->db->query("INSERT IGNORE INTO " . DB_PREFIX . "product_to_field SET product_id = '" . (int)$product_id . "', additional_product_id = '" . (int)$additional_product_id . "', language_id = '" . (int)$language_id . "', name = '" .  $this->db->escape($product_to_field_value['name']) . "'");
                    
                }
            }*/
        }
            
            ]]></add>
        </operation>        
                
        <operation>
            <search position="after"><![CDATA[$this->db->query("DELETE FROM " . DB_PREFIX . "product WHERE]]></search>
            <add><![CDATA[
            $this->db->query("DELETE FROM " . DB_PREFIX . "product_to_field WHERE product_id = '" . (int)$product_id . "'");
            ]]></add>
        </operation>        
    </file>     
    
    <file name="admin/controller/catalog/product.php">
        <operation>
            <search position="before"><![CDATA[if (isset($this->request->post['shipping'])) {]]></search>
            <add><![CDATA[
            
            $this->load->model('localisation/additional_product');
            $data['config_language_id'] = $this->config->get('config_language_id');
        
            if (isset($this->request->post['additional_product'])) {
                    $additional_products = $this->request->post['additional_product'];
                } else {
                    $additional_products = $this->model_localisation_additional_product->getAdditionalProductes();
                } 
            
            foreach ($additional_products as $additional_product) {
                if (!(isset($additional_product['dropdown'])) || !($additional_product['dropdown'])) {
                    $data['additional_products'][] = array(
                        'field' => $additional_product['name'],
                        'id' => $additional_product['additional_product_id'],
                        'dropdown' => 0
                    );
                } else {
                    $data['additional_products'][] = array(
                        'field' => $additional_product['name'],
                        'id' => $additional_product['additional_product_id'],
                        'dropdown' => $additional_product['dropdown'],
                        'values' => $this->model_localisation_additional_product->getAdditionalProductValues($additional_product['additional_product_id'])
                    );
                }
            }
            
            if (isset($this->request->post['product_to_field'])) {
                    $data['product_to_field'] = $this->request->post['product_to_field'];
                } elseif (isset($this->request->get['product_id'])) {
                    $data['product_to_field'] = $this->model_localisation_additional_product->getAdditionalProductDescriptionsbyProductId($this->request->get['product_id']);
                } else {
                    $data['product_to_field'] = array();
                }
            
            ]]></add>
        </operation>        
    </file>     
    
    <file name="admin/view/template/catalog/product_form.tpl">
        <operation>
            <search position="before" index="1"><![CDATA[<?php echo $entry_location; ?>]]></search>
            <add><![CDATA[
            <?php if (isset($additional_products)) {foreach ($additional_products as $additional_product) { ?>
              <label class="col-sm-2 control-label" for="input-<?php echo $additional_product['field']; ?>"><?php echo $additional_product['field']; ?></label>
              <?php if (!(isset($additional_product['dropdown'])) || !($additional_product['dropdown'])) { ?>
              <div class="col-sm-10"><?php foreach ($languages as $language) { ?>
                  <input type="text" name="product_to_field[<?php echo $language['language_id']; ?>][<?php echo $additional_product['id']; ?>][name]" 
                  value="<?php echo isset($product_to_field[$language['language_id']][$additional_product['id']]) ? $product_to_field[$language['language_id']][$additional_product['id']]['name'] : ''; ?>" />
                  <img src="<?php echo ((VERSION >= '2.3.0.0')? "language/".$language['code']."/".$language['code'].".png" : "view/image/flags/".$language['image']); ?>" title="<?php echo $language['name']; ?>" /><br />
                  <?php if (isset($error_name[$language['language_id']])) { ?>
                  <span class="error"><?php echo $error_name[$language['language_id']]; ?></span><br />
                  <?php } ?>
                  <?php } ?>
              </div>
              <?php } else { ?>
              <div class="col-sm-10">
              <select name="product_to_field[<?php echo $config_language_id; ?>][<?php echo $additional_product['id']; ?>][name]">
              <option value="-1"></option>
              <?php foreach ($additional_product['values'] as $additional_product_value_id => $value) { ?>          
                                
                <?php if ((!empty($product_to_field) && !empty($value) && (isset($value[$config_language_id])) && (isset($product_to_field[$config_language_id][$additional_product['id']]))) && ($value[$config_language_id]['value'] == $product_to_field[$config_language_id][$additional_product['id']]['name'])) { ?>          
                  <option value="<?php echo $additional_product_value_id; ?>" selected="selected"><?php echo $value[$config_language_id]['value']; ?></option>
                  <?php } else { ?>
                  <option value="<?php echo $additional_product_value_id; ?>"><?php echo $value[$config_language_id]['value']; ?></option>
                  <?php } ?>                 
                
              <?php } ?>
              </select>
              </div>
              <?php } ?>
             </div>
              <div class="form-group">
            <?php } } ?>
            ]]></add>
        </operation>        
    </file>     
    
    <file name="catalog/model/catalog/product.php">
        <operation>
            <search position="replace"><![CDATA[LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id)]]></search>
            <add><![CDATA[LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_field ptf ON (p.product_id = ptf.product_id)]]></add>
        </operation>
        <operation error="skip">
            <search position="replace"><![CDATA[LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%']]></search>
            <add><![CDATA[LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%' OR LCASE(ptf.name) LIKE '%" . $this->db->escape(utf8_strtolower($word)) . "%']]></add>
        </operation>
        <operation error="skip">
            <search position="replace"><![CDATA[LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%']]></search>
            <add><![CDATA[LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%' OR LCASE(ptf.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%']]></add>
        </operation>
        <operation>
            <search position="before"><![CDATA[public function getProductImages($product_id) {]]></search>
            <add><![CDATA[
            public function getAdditionalProductes($data = array()) {
                
                        $query = $this->db->query("SELECT additional_product_id, name, display FROM " . DB_PREFIX . "additional_product WHERE language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY sort");
            
                        $additional_product_data = $query->rows;
                        
                        return $additional_product_data;                        
            }
            
            public function getAdditionalProductDescriptionsbyProductId($product_id) {
                $product_to_field = array();
                
                $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_field WHERE product_id = '" . (int)$product_id . "' and language_id = '" . (int)$this->config->get('config_language_id') . "'");
                
                foreach ($query->rows as $result) {
                    $product_to_field[$result['additional_product_id']] = array('name' => $result['name']);
                }
                return $product_to_field;
            }

            
            ]]></add>
        </operation>        
    </file>     
    
    <file name="catalog/controller/product/product.php">
        <operation>
            <search position="before"><![CDATA[$data['images'] = array();]]></search>
            <add><![CDATA[
            
            $data['additional_products'] = array();
            
            $additional_products = $this->model_catalog_product->getAdditionalProductes();
                        
            foreach ($additional_products as $additional_product) {
                
                $data['additional_products'][] = array(
                    'field' => $additional_product['name'],
                    'id' => $additional_product['additional_product_id'],
                    'display' => $additional_product['display']
                );
            }
            
            $data['product_to_field'] = $this->model_catalog_product->getAdditionalProductDescriptionsbyProductId($this->request->get['product_id']);
                                    
            ]]></add>
        </operation>        
    </file>
    
        
    <file name="catalog/view/theme/*/template/product/product.tpl">
        <operation>
            <search position="before"><![CDATA[<?php echo $text_stock; ?>]]></search>
            <add><![CDATA[
            <?php if (isset($additional_products) && !empty($additional_products)) {foreach ($additional_products as $additional_product) { ?>
            <?php if (isset($product_to_field[$additional_product['id']]) && ($product_to_field[$additional_product['id']]['name'] <> '') && ($additional_product['display'])) { ?>
              <span><?php echo $additional_product['field']; ?>:</span>
              <?php echo $product_to_field[$additional_product['id']]['name']; ?>
              <br />
            <?php } ?>
            <?php } ?>
            <?php } ?>
            
            ]]></add>
        </operation>        
    </file>
    <file name="catalog/controller/product/compare.php">
        <operation>
            <search position="after"><![CDATA[$data['attribute_groups'] = array();]]></search>
            <add><![CDATA[
            $data['additional_products'] = array();
            
            $additional_products = $this->model_catalog_product->getAdditionalProductes();
                        
            foreach ($additional_products as $additional_product) {
                
                $data['additional_products'][] = array(
                    'field' => $additional_product['name'],
                    'id' => $additional_product['additional_product_id'],
                    'display' => $additional_product['display']
                );
            }
            ]]></add>
        </operation>    
        <operation>
            <search position="after"><![CDATA[$attribute_data = array();]]></search>
            <add><![CDATA[
            $product_to_field = array();
            $product_to_field = $this->model_catalog_product->getAdditionalProductDescriptionsbyProductId($product_id);
            ]]></add>
        </operation>
        <operation>
            <search position="replace"><![CDATA['attribute'    => $attribute_data,]]></search>
            <add><![CDATA['attribute'    => $attribute_data, 'product_to_field'    => $product_to_field, ]]></add>
        </operation>        
    </file>
    <file name="catalog/view/theme/*/template/product/compare.tpl">
        <operation>
            <search position="before"><![CDATA[<td><?php echo $text_manufacturer; ?></td>]]></search>
            <add><![CDATA[
            <?php if (isset($additional_products)) { foreach ($additional_products as $additional_product) { ?>
            
                <td><?php echo $additional_product['field']; ?></td>
              <?php foreach ($products as $product) { ?>
                <td><?php if (isset($products[$product['product_id']]['product_to_field'][$additional_product['id']]['name'])) {echo $products[$product['product_id']]['product_to_field'][$additional_product['id']]['name'];} ?></td>
               <?php } ?>
             </tr>
            <tr>        
            
            <?php } ?>
            <?php } ?>
            ]]></add>
        </operation>    
                
    </file>

</modification>


adding code part for compare view to catalog view

0

There are 0 best solutions below