Skip to main content

Cpanel order don't use canonical url and breaks it

10 years 8 months ago #230714 by almika
-- HikaShop version -- : 2.6.0
-- Joomla version -- : 3.4.6

Hi,

My setting for canonical url is "Use canonical URL and generate it if missing".
I checked all canonical url for products. All was fine.
But then I see - some url were broken.
Just now I know that is happened after a user see his order in cpanel.
Products' show in cpanel orders don't use canonical url's from product table and rewrite it.
If I set "Use canonical URL", Cpanel/order/show don't rewrite it, but no use it still.

Any advices, please.
Thank you.

Please Log in or Create an account to join the conversation.

10 years 8 months ago #230732 by nicolas
Hi,

Edit the file "show" of the view "order" via the menu Display>Views and replace its content with:
Code:
<?php $colspan = 2; global $Itemid; $url_itemid = ''; if(!empty($Itemid)) { $url_itemid = '&Itemid=' . $Itemid; } $config = hikashop_config(); ?> <div id="hikashop_order_main"> <fieldset> <div class="header hikashop_header_title"> <h1> <?php if($this->invoice_type == 'order' || empty($this->element->order_invoice_number)) { echo JText::_('HIKASHOP_ORDER').':'.$this->element->order_number; } else { echo JText::_('INVOICE').':'.$this->element->order_invoice_number; } ?> </h1> </div> <?php if($this->invoice_type == 'order') { ?> <div class="toolbar hikashop_header_buttons" id="toolbar"> <table> <tr> <?php if(hikashop_level(1)) { if($this->config->get('print_invoice_frontend') && !in_array($this->element->order_status, array('created','refunded','cancelled'))) { ?> <td><?php echo $this->popup->display( '<span class="icon-32-print" title="'. JText::_('PRINT_INVOICE').'"></span>'. JText::_('PRINT_INVOICE'), 'PRINT_INVOICE', hikashop_completeLink('order&task=invoice&order_id='.$this->element->order_id.$url_itemid,true), 'hikashop_print_invoice', 760, 480, '', '', 'link' ); ?></td> <?php } } ?> <td> <a id="hikashop_order_back_button" onclick="submitbutton('cancel'); return false;" href="#"> <span class="icon-32-back" title="<?php echo JText::_('HIKA_BACK'); ?>"></span> <?php echo JText::_('HIKA_BACK'); ?> </a> </td> </tr> </table> </div> <?php } ?> </fieldset> <form action="<?php echo hikashop_completeLink('order'.$url_itemid); ?>" method="post" name="adminForm" id="adminForm"> <table width="100%"> <tr> <td> <div id="hikashop_order_right_part" class="hikashop_order_right_part"> <?php if($this->invoice_type == 'order' || empty($this->element->order_invoice_created)) { echo JText::_('DATE').': '.hikashop_getDate($this->element->order_created, '%d %B %Y'); } else { echo JText::_('DATE').': '.hikashop_getDate($this->element->order_invoice_created, '%d %B %Y'); } ?> <br/> <?php if($this->invoice_type == 'order' || empty($this->element->order_invoice_number)) { echo JText::_('HIKASHOP_ORDER').': '.@$this->element->order_number; } else { echo JText::_(strtoupper($this->invoice_type)).': '.@$this->element->order_invoice_number; } ?> </div> <div id="hikashop_order_left_part" class="hikashop_order_left_part"><?php echo $this->store_address; ?></div> </td> </tr> <tr> <td> <table width="100%"> <tr> <?php $params = null; $js = ''; ?> <?php if(!empty($this->element->billing_address)) { ?> <td> <fieldset class="adminform" id="htmlfieldset_billing"> <legend style="background-color: #FFFFFF;"><?php echo JText::_('HIKASHOP_BILLING_ADDRESS'); ?></legend> <?php $addressClass = hikashop_get('class.address'); echo $addressClass->displayAddress($this->element->fields,$this->element->billing_address,'address'); ?> </fieldset> </td> <?php } if(!empty($this->element->order_shipping_id) && !empty($this->element->shipping_address)) { ?> <td> <fieldset class="adminform" id="htmlfieldset_shipping"> <legend style="background-color: #FFFFFF;"><?php echo JText::_('HIKASHOP_SHIPPING_ADDRESS'); ?></legend> <?php $override = false; if(method_exists($this->currentShipping, 'getShippingAddress')) { $override = $this->currentShipping->getShippingAddress($this->element->order_shipping_id); } if($override !== false ) { echo $override; } else { $addressClass = hikashop_get('class.address'); echo $addressClass->displayAddress($this->element->fields, $this->element->shipping_address, 'address'); } ?> </fieldset> </td> <?php } ?> </tr> </table> </td> </tr> <tr> <td> <fieldset class="adminform" id="htmlfieldset_products"> <legend style="background-color: #FFFFFF;"><?php echo JText::_('PRODUCT_LIST'); ?></legend> <table cellpadding="1" width="100%"> <thead> <tr> <th class="hikashop_order_item_name_title title"><?php echo JText::_('PRODUCT'); ?></th> <?php $files = false; foreach($this->order->products as $product ){ if(!empty($product->files)) { $files = true; break; } } if($this->invoice_type == 'order' && $files) { $colspan++; ?> <th class="hikashop_order_item_files_title title"><?php echo JText::_('HIKA_FILES'); ?></th> <?php } ?> <th class="hikashop_order_item_price_title title"><?php echo JText::_('UNIT_PRICE'); ?></th> <th class="hikashop_order_item_quantity_title title titletoggle"><?php echo JText::_('PRODUCT_QUANTITY'); ?></th> <th class="hikashop_order_item_total_title title titletoggle"><?php echo JText::_('PRICE'); ?></th> </tr> </thead> <tbody> <?php $k=0; $group = $this->config->get('group_options',0); $productClass = hikashop_get('class.product'); foreach($this->order->products as $product) { if($group && $product->order_product_option_parent_id) continue; ?> <tr class="row<?php echo $k;?>"> <td class="hikashop_order_item_name_value"> <?php if($this->invoice_type=='order' && !empty($product->product_id)) { $prodData = $productClass->get($product->product_id); ?> <a class="hikashop_order_product_link" href="<?php echo hikashop_contentLink('product&task=show&cid='.$product->product_id.$url_itemid,$prodData); ?>"> <?php } ?> <p class="hikashop_order_product_name"> <?php echo $product->order_product_name; ?> <?php if($this->config->get('show_code')) { ?> <span class="hikashop_product_code_order"><?php echo $product->order_product_code; ?></span> <?php } ?> </p> <?php if($group) { $display_item_price = false; foreach($this->order->products as $j => $optionElement) { if($optionElement->order_product_option_parent_id != $product->order_product_id) continue; if($optionElement->order_product_price > 0) { $display_item_price = true; } } if($display_item_price) { if($this->config->get('price_with_tax')) { echo ' '.$this->currencyHelper->format($product->order_product_price + $product->order_product_tax, $this->order->order_currency_id); } else { echo ' '.$this->currencyHelper->format($product->order_product_price, $this->order->order_currency_id); } } } ?> <?php if($this->invoice_type == 'order' && !empty($product->product_id)) { ?> </a> <?php } ?> <p class="hikashop_order_product_custom_item_fields"> <?php if(hikashop_level(2) && !empty($this->fields['item'])) { foreach($this->fields['item'] as $field) { $namekey = $field->field_namekey; if(!empty($product->$namekey) && strlen($product->$namekey)) { echo '<p class="hikashop_order_item_'.$namekey.'">' . $this->fieldsClass->getFieldName($field) . ': ' . $this->fieldsClass->show($field,$product->$namekey) . '</p>'; } } } if($group) { foreach($this->order->products as $j => $optionElement) { if($optionElement->order_product_option_parent_id != $product->order_product_id) continue; $product->order_product_price += $optionElement->order_product_price; $product->order_product_tax += $optionElement->order_product_tax; $product->order_product_total_price += $optionElement->order_product_total_price; $product->order_product_total_price_no_vat += $optionElement->order_product_total_price_no_vat; ?> <p class="hikashop_order_option_name"> <?php echo $optionElement->order_product_name; if($optionElement->order_product_price > 0) { if($this->config->get('price_with_tax')) { echo ' ( + '.$this->currencyHelper->format($optionElement->order_product_price + $optionElement->order_product_tax, $this->order->order_currency_id).' )'; } else { echo ' ( + '.$this->currencyHelper->format($optionElement->order_product_price, $this->order->order_currency_id).' )'; } } ?> </p> <?php } } ?> </p> <?php if(!empty($product->extraData)) echo '<p class="hikashop_order_product_extra">' . (is_string($product->extraData) ? $product->extraData : implode('<br/>', $product->extraData)) . '</p>'; ?> </td> <?php if($this->invoice_type == 'order' && $files) { ?> <td class="hikashop_order_item_files_value"> <?php if(!empty($product->files) && ($this->order_status_download_ok || bccomp($product->order_product_price, 0, 5) == 0)) { $html = array(); foreach($product->files as $file) { $fileHtml = ''; if(!empty($this->download_time_limit) && ($this->download_time_limit + (!empty($this->order->order_invoice_created) ? $this->order->order_invoice_created : $this->order->order_created)) < time()) { $fileHtml = JText::_('TOO_LATE_NO_DOWNLOAD'); } if(!empty($file->file_limit) && (int)$file->file_limit != 0) { $download_number_limit = $file->file_limit; if($download_number_limit < 0) $download_number_limit = 0; } else { $download_number_limit = $this->download_number_limit; } if(!empty($download_number_limit) && $download_number_limit<=$file->download_number) { $fileHtml = JText::_('MAX_REACHED_NO_DOWNLOAD'); } if(empty($fileHtml)) { if(empty($file->file_name)) { $file->file_name = JText::_('DOWNLOAD_NOW'); } $file_pos = ''; if(!empty($file->file_pos)) { $file_pos = '&file_pos='.$file->file_pos; } $fileHtml = '<a href="'.hikashop_completeLink('order&task=download&file_id='.$file->file_id.'&order_id='.$this->order->order_id.$file_pos.$url_itemid).'">'.$file->file_name.'</a>'; $order_created = (empty($this->order->order_invoice_created) ? $this->order->order_created : $this->order->order_invoice_created); if(!empty($this->download_time_limit)) $fileHtml .= ' / ' . JText::sprintf('UNTIL_THE_DATE', hikashop_getDate($order_created + $this->download_time_limit)); if(!empty($download_number_limit)) $fileHtml .= ' / '. JText::sprintf('X_DOWNLOADS_LEFT', $download_number_limit - $file->download_number); } else { if(empty($file->file_name)) { $file->file_name = JText::_('EMPTY_FILENAME'); } $fileHtml = $file->file_name . ' ' . $fileHtml; } $html[] = $fileHtml; } echo implode('<br/>', $html); } ?> </td> <?php } ?> <td class="hikashop_order_item_price_value"><?php if($this->config->get('price_with_tax')) { echo $this->currencyHelper->format($product->order_product_price + $product->order_product_tax, $this->order->order_currency_id); } else { echo $this->currencyHelper->format($product->order_product_price, $this->order->order_currency_id); } ?></td> <td class="hikashop_order_item_quantity_value"><?php echo $product->order_product_quantity; ?></td> <td class="hikashop_order_item_total_value"><?php if($this->config->get('price_with_tax')) { echo $this->currencyHelper->format($product->order_product_total_price,$this->order->order_currency_id); } else { echo $this->currencyHelper->format($product->order_product_total_price_no_vat,$this->order->order_currency_id); } ?></td> </tr> <?php $k = 1 - $k; } ?> <tr> <td style="border-top:2px solid #B8B8B8;" colspan="<?php echo $colspan; ?>"> </td> <td class="hikashop_order_subtotal_title" style="border-top:2px solid #B8B8B8;" class="key"> <label><?php echo JText::_( 'SUBTOTAL' ); ?></label> </td> <td class="hikashop_order_subtotal_value" style="border-top:2px solid #B8B8B8;"><?php if($this->config->get('price_with_tax')) { echo $this->currencyHelper->format($this->order->order_subtotal,$this->order->order_currency_id); } else { echo $this->currencyHelper->format($this->order->order_subtotal_no_vat,$this->order->order_currency_id); } ?></td> </tr> <?php $taxes = round($this->order->order_subtotal - $this->order->order_subtotal_no_vat + $this->order->order_shipping_tax + $this->order->order_payment_tax - $this->order->order_discount_tax,$this->currencyHelper->getRounding($this->order->order_currency_id, true)); if(!empty($this->order->order_discount_code)) { ?> <tr> <td colspan="<?php echo $colspan; ?>"> </td> <td class="hikashop_order_coupon_title key"> <label><?php echo JText::_( 'HIKASHOP_COUPON' ); ?></label> </td> <td class="hikashop_order_coupon_value"><?php if($this->config->get('price_with_tax')) { echo $this->currencyHelper->format($this->order->order_discount_price*-1.0,$this->order->order_currency_id); } else { echo $this->currencyHelper->format(($this->order->order_discount_price-@$this->order->order_discount_tax)*-1.0,$this->order->order_currency_id); } ?></td> </tr> <?php } if(!empty($this->order->order_shipping_method)) { ?> <tr> <td colspan="<?php echo $colspan; ?>"> </td> <td class="hikashop_order_shipping_title key"> <label><?php echo JText::_( 'SHIPPING' ); ?></label> </td> <td class="hikashop_order_shipping_value"><?php if($this->config->get('price_with_tax')) { echo $this->currencyHelper->format($this->order->order_shipping_price,$this->order->order_currency_id); } else { echo $this->currencyHelper->format($this->order->order_shipping_price-@$this->order->order_shipping_tax,$this->order->order_currency_id); } ?></td> </tr> <?php } if(!empty($this->order->additional)) { $exclude_additionnal = explode(',', $this->config->get('order_additional_hide', '')); foreach($this->order->additional as $additional) { if(in_array($additional->order_product_name, $exclude_additionnal)) continue; ?> <tr> <td colspan="<?php echo $colspan; ?>"> </td> <td class="hikashop_order_additionall_title key"> <label><?php echo JText::_($additional->order_product_name); ?></label> </td> <td class="hikashop_order_additional_value"><?php if(!empty($additional->order_product_price)) { $additional->order_product_price = (float)$additional->order_product_price; } if(!empty($additional->order_product_price) || empty($additional->order_product_options)) { if($config->get('price_with_tax')){ echo $this->currencyHelper->format($additional->order_product_price + @$additional->order_product_tax, $this->order->order_currency_id); }else{ echo $this->currencyHelper->format($additional->order_product_price, $this->order->order_currency_id); } } else { echo $additional->order_product_options; } ?></td> </tr> <?php } } if(!empty($this->order->order_payment_method) && $this->order->order_payment_price != 0) { ?> <tr> <td colspan="<?php echo $colspan; ?>"> </td> <td class="hikashop_order_payment_title key"> <label><?php echo JText::_( 'HIKASHOP_PAYMENT' ); ?></label> </td> <td class="hikashop_order_payment_value" ><?php if($this->config->get('price_with_tax')) { echo $this->currencyHelper->format($this->order->order_payment_price, $this->order->order_currency_id); } else { echo $this->currencyHelper->format($this->order->order_payment_price - @$this->order->order_payment_tax, $this->order->order_currency_id); } ?></td> </tr> <?php } if($taxes != 0){ if($this->config->get('detailed_tax_display') && !empty($this->order->order_tax_info)) { foreach($this->order->order_tax_info as $tax) { ?> <tr> <td colspan="<?php echo $colspan; ?>"> </td> <td class="hikashop_order_tax_title key"> <label><?php echo $tax->tax_namekey; ?></label> </td> <td class="hikashop_order_tax_value"><?php echo $this->currencyHelper->format($tax->tax_amount, $this->order->order_currency_id); ?></td> </tr> <?php } } else { ?> <tr> <td colspan="<?php echo $colspan; ?>"> </td> <td class="hikashop_order_tax_title key"> <label><?php echo JText::_( 'VAT' ); ?></label> </td> <td class="hikashop_order_tax_value"><?php echo $this->currencyHelper->format($taxes,$this->order->order_currency_id); ?></td> </tr> <?php } } ?> <tr> <td colspan="<?php echo $colspan; ?>"> </td> <td class="hikashop_order_total_title key"> <label><?php echo JText::_( 'HIKASHOP_TOTAL' ); ?></label> </td> <td class="hikashop_order_total_value" ><?php echo $this->currencyHelper->format($this->order->order_full_price, $this->order->order_currency_id); ?></td> </tr> </tbody> </table> </fieldset> </td> </tr> <tr> <td> <?php if(!empty($this->shipping)) { echo JText::_('HIKASHOP_SHIPPING_METHOD') . ' : '; if(is_string($this->order->order_shipping_method)) { if(strpos($this->order->order_shipping_id, '-') !== false) echo $this->shippingClass->getShippingName($this->order->order_shipping_method, $this->order->order_shipping_id); else echo $this->shipping->getName($this->order->order_shipping_method, $this->order->order_shipping_id); } else echo implode(', ', $this->order->order_shipping_method); echo '<br/>'; } ?> <?php if(!empty($this->payment)) { echo JText::_('HIKASHOP_PAYMENT_METHOD') . ' : ' . $this->payment->getName($this->order->order_payment_method, $this->order->order_payment_id); } ?> </td> </tr> <tr> <td> <?php JPluginHelper::importPlugin('hikashop'); JPluginHelper::importPlugin('hikashopshipping'); JPluginHelper::importPlugin('hikashoppayment'); $dispatcher = JDispatcher::getInstance(); $dispatcher->trigger('onAfterOrderProductsListingDisplay', array(&$this->order, 'order_front_show')); ?> </td> </tr> <?php if(hikashop_level(2) && !empty($this->fields['order'])) { ?> <tr> <td> <fieldset class="hikashop_order_custom_fields_fieldset"> <legend><?php echo JText::_('ADDITIONAL_INFORMATION'); ?></legend> <table class="hikashop_order_custom_fields_table adminlist" cellpadding="1" width="100%"> <?php foreach($this->fields['order'] as $fieldName => $oneExtraField) { if(!@$oneExtraField->field_frontcomp || empty($this->order->$fieldName)) continue; ?> <tr class="hikashop_order_custom_field_<?php echo $fieldName;?>_line"> <td class="key"><?php echo $this->fieldsClass->getFieldName($oneExtraField); ?></td> <td><?php echo $this->fieldsClass->show($oneExtraField,$this->order->$fieldName); ?></td> </tr> <?php } ?> </table> </fieldset> </td> </tr> <?php } ?> <?php if(hikashop_level(2) && !empty($this->order->entries)) { ?> <tr> <td> <fieldset class="htmlfieldset_entries"> <legend><?php echo JText::_('HIKASHOP_ENTRIES'); ?></legend> <table class="hikashop_entries_table adminlist" cellpadding="1" width="100%"> <thead> <tr> <th class="title titlenum"><?php echo JText::_( 'HIKA_NUM' ); ?></th> <?php if(!empty($this->fields['entry'])) { foreach($this->fields['entry'] as $field) { echo '<th class="title">' . $this->fieldsClass->trans($field->field_realname) . '</th>'; } } ?> </tr> </thead> <tbody> <?php $k = 0; $i = 1; foreach($this->order->entries as $entry) { ?> <tr class="row<?php echo $k;?>"> <td><?php echo $i; ?></td> <?php if(!empty($this->fields['entry'])) { foreach($this->fields['entry'] as $field) { $namekey = $field->field_namekey; if(!empty($entry->$namekey)) echo '<td>'.$this->fieldsClass->show($field, $entry->$namekey).'</td>'; } } ?> </tr> <?php $k = 1 - $k; $i++; } ?> </tbody> </table> </fieldset> </td> </tr> <?php } ?> </table> <input type="hidden" name="cid" value="<?php echo (int)$this->element->order_id; ?>" /> <input type="hidden" name="option" value="<?php echo HIKASHOP_COMPONENT; ?>" /> <input type="hidden" name="task" value="" /> <input type="hidden" name="ctrl" value="<?php echo JRequest::getCmd('ctrl'); ?>" /> <input type="hidden" name="cancel_redirect" value="<?php echo JRequest::getString('cancel_redirect'); ?>" /> <input type="hidden" name="cancel_url" value="<?php echo JRequest::getString('cancel_url'); ?>" /> <?php echo JHTML::_( 'form.token' ); ?> </form> </div> <div style="page-break-after:always"></div>
and that should fix the issue.
The following user(s) said Thank You: almika

Please Log in or Create an account to join the conversation.

10 years 8 months ago #230746 by almika
Thank you very much, nicolas!

Excellent work!

Merci beaucoup, mon ami.

Please Log in or Create an account to join the conversation.

Time to create page: 0.052 seconds
Powered by Kunena Forum