Hi there,
This is my last resort, I've been searching and reading this forum a lot today and I never found a real solution.
Let's start with some basic info;
Joomla version: 2.5.6
VirtueMart version: 2.0.6
Reason I want this custom code: I attend to refrain myself from the product detail page because I'm developing a webshop for a food order company. Food should be able to be ordered as quick as possible. Having to click the product detail page first before ordering is therefor out of the question for my client. From my point of view it's a waste of space anyway because he doesn't even have descriptions for his products.
What I already achieved to solve my problem: Nothing really, but I did got around to adding the add to cart button to the category page. Adding the custom fields is just the last piece of the puzzle.
I made a simple visual what I exactly want:
(http://eprints.nl/mekan/images/problem.jpg)
But I can't seem to get ANY output there, I tried a few different codes as well from different topics and of course the code from the productdetails\tmpl\default_customfields.php file with replacing $this-> for $product->
The current code that does nothing for me but helped forum user Lipis if I remember correctly is:
<?php $custom_title = null;
if (!empty($product->customfields)) {
foreach ($product->customfields as $field) {
if ($field->is_hidden ) //OSP http://forum.virtuemart.net/index.php?topic=99320.0
continue;
if ($field->display) { ?>
<span class="product-field-display"><?php echo $field->display ?></span>
<?php } } } ?>
I really hope anyone is able to help me, because I'm out of ideas :-[
Thanks a ton in advance to any reply.
Did you get any further on this ? Anybody ? I need this to.
I have managed to get the custom fields to display in the category page, but am having a major headache with trying to get the selection to update the price...
The code I used is as follows:
<?php // Product custom_fields
if (!empty($product->customfieldsCart)) { ?>
<div class="product-fields">
<?php foreach ($product->customfieldsCart as $field)
{ ?><div style="display:inline-block;" class="product-field product-field-type-<?php echo $field->field_type ?>">
<span class="product-fields-title" ><b><?php echo JText::_($field->custom_title) ?></b></span>
<span class="product-field-display"><?php echo $field->display ?></span>
<span class="product-field-cat-desc"><?php echo $field->custom_field_desc ?></span>
</div><br/ >
<?php
}
?>
</div>
Like I said, this displays the select box for the child items, but the price updating doesn't function correctly. Hope this helps a little, and if anyone can figure out why the price isn't updating properly, please post a solution here.
Thanks.
Thanks Mikkidee. I am getting the same results. The custom fields appear right where I want them on the category page, but the price does not update. Hopefully somebody can provide us with more information to make this work properly.
This is working for me:
http://forum.virtuemart.net/index.php?topic=90961.90
Quote from: webiedesign on July 14, 2012, 19:53:27 PM
This is working for me:
http://forum.virtuemart.net/index.php?topic=90961.90
Do you mean with the updating of the price as well?
That's actually my post - outthebox is business and this personal acc... - but it's not updating the price correctly when the variant is selected. I've been battling with this for days now.
Yes, your version (thank you !) is working for me and updating the price.
After much searching and trying lots of different suggestions, this is what worked for me.
Question: How to add custom fields to the category page?
Answer: From http://forum.virtuemart.net/index.php?topic=99225.msg344246#msg344246
<?php $custom_title = null;
if (!empty($product->customfields)) {
foreach ($product->customfields as $field) {
if ($field->is_hidden ) //OSP http://forum.virtuemart.net/index.php?topic=99320.0
continue;
if ($field->display) { ?>
<span class="product-field-display"><?php echo $field->display ?></span>
<?php } ?> <?php } ?> <?php } ?>
Thank you, lipes!
Can some one help me, what is the code I need to insert in the category page to display there :
Add to cart button
Quantity selector
Custom field option selector
Thanks !
@phpman ... for the first two please try to search the forum, is a sticky topic under template and layouts section: http://forum.virtuemart.net/index.php?topic=90961.0
I think this is exactly what I need, but I'm lacking some skills here to implement it..
I'm still working on my website but here's the link to it:
http://kunstvoorkunst.com/index.php/bestellen/snacks
What I want is to have two custom fields on this page, between the price and the amount.. (e.g. I need a custom field so people can select the sauce they want to have on their snack, in total I need 2 custom fields)
Now I changed the layout of the category page with this code:
<?php
/**
*
* Show the products in a category
*
* @package VirtueMart
* @subpackage
* @author RolandD
* @author Max Milbers
* @todo add pagination
* @link http://www.virtuemart.net
* @copyright Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
* VirtueMart is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
* @version $Id: default.php 6053 2012-06-05 12:36:21Z Milbo $
*/
//vmdebug('$this->category',$this->category);
vmdebug('$this->category '.$this->category->category_name);
// Check to ensure this file is included in Joomla!
defined('_JEXEC') or die('Restricted access');
JHTML::_( 'behavior.modal' );
/* javascript for list Slide
Only here for the order list
can be changed by the template maker
*/
$js = "
jQuery(document).ready(function () {
jQuery('.orderlistcontainer').hover(
function() { jQuery(this).find('.orderlist').stop().show()},
function() { jQuery(this).find('.orderlist').stop().hide()}
)
});
";
$document = JFactory::getDocument();
$document->addScriptDeclaration($js);
/*$edit_link = '';
if(!class_exists('Permissions')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'permissions.php');
if (Permissions::getInstance()->check("admin,storeadmin")) {
$edit_link = '<a href="'.JURI::root().'index.php?option=com_virtuemart&tmpl=component&view=category&task=edit&virtuemart_category_id='.$this->category->virtuemart_category_id.'">
'.JHTML::_('image', 'images/M_images/edit.png', JText::_('COM_VIRTUEMART_PRODUCT_FORM_EDIT_PRODUCT'), array('width' => 16, 'height' => 16, 'border' => 0)).'</a>';
}
echo $edit_link; */
if ( empty($this->keyword) ) {
?>
<div class="category_description">
<?php echo $this->category->category_description ; ?>
</div>
<?php
}
/* Show child categories */
if ( VmConfig::get('showCategory',1) and empty($this->keyword)) {
if ($this->category->haschildren) {
// Category and Columns Counter
$iCol = 1;
$iCategory = 1;
// Calculating Categories Per Row
$categories_per_row = VmConfig::get ( 'categories_per_row', 3 );
$category_cellwidth = ' width'.floor ( 100 / $categories_per_row );
// Separator
$verticalseparator = " vertical-separator";
?>
<div class="category-view">
<?php // Start the Output
if(!empty($this->category->children)){
foreach ( $this->category->children as $category ) {
// Show the horizontal seperator
if ($iCol == 1 && $iCategory > $categories_per_row) { ?>
<div class="horizontal-separator"></div>
<?php }
// this is an indicator wether a row needs to be opened or not
if ($iCol == 1) { ?>
<div class="row">
<?php }
// Show the vertical seperator
if ($iCategory == $categories_per_row or $iCategory % $categories_per_row == 0) {
$show_vertical_separator = ' ';
} else {
$show_vertical_separator = $verticalseparator;
}
// Category Link
$caturl = JRoute::_ ( 'index.php?option=com_virtuemart&view=category&virtuemart_category_id=' . $category->virtuemart_category_id );
// Show Category ?>
<div class="category floatleft<?php echo $category_cellwidth . $show_vertical_separator ?>">
<div class="spacer">
<h2>
<a href="<?php echo $caturl ?>" title="<?php echo $category->category_name ?>">
<?php echo $category->category_name ?>
<br />
<?php // if ($category->ids) {
echo $category->images[0]->displayMediaThumb("",false);
//} ?>
</a>
</h2>
</div>
</div>
<?php
$iCategory ++;
// Do we need to close the current row now?
if ($iCol == $categories_per_row) { ?>
<div class="clear"></div>
</div>
<?php
$iCol = 1;
} else {
$iCol ++;
}
}
}
// Do we need a final closing row tag?
if ($iCol != 1) { ?>
<div class="clear"></div>
</div>
<?php } ?>
</div>
<?php }
}
?>
<div class="browse-view">
<?php
if (!empty($this->keyword)) {
?>
<h3><?php echo $this->keyword; ?></h3>
<?php
} ?>
<?php if ($this->search !==null ) { ?>
<form action="<?php echo JRoute::_('index.php?option=com_virtuemart&view=category&limitstart=0&virtuemart_category_id='.$this->category->virtuemart_category_id ); ?>" method="get">
<!--BEGIN Search Box --><div class="virtuemart_search">
<?php echo $this->searchcustom ?>
<br />
<?php echo $this->searchcustomvalues ?>
<input name="keyword" class="inputbox" type="text" size="20" value="<?php echo $this->keyword ?>" />
<input type="submit" value="<?php echo JText::_('COM_VIRTUEMART_SEARCH') ?>" class="button" onclick="this.form.keyword.focus();"/>
</div>
<input type="hidden" name="search" value="true" />
<input type="hidden" name="view" value="category" />
</form>
<!-- End Search Box -->
<?php } ?>
<?php // Show child categories
if (!empty($this->products)) {
?>
<div class="orderby-displaynumber">
<div class="width70 floatleft">
<?php echo $this->orderByList['orderby']; ?>
</div>
<div class="width30 floatright display-number"><?php echo $this->vmPagination->getResultsCounter();?><br/><?php echo $this->vmPagination->getLimitBox(); ?></div>
<div class="vm-pagination">
<?php echo $this->vmPagination->getPagesLinks(); ?>
<span style="float:right"><?php echo $this->vmPagination->getPagesCounter(); ?></span>
</div>
<div class="clear"></div>
</div> <!-- end of orderby-displaynumber -->
<h1><?php echo $this->category->category_name; ?></h1>
<?php
// Category and Columns Counter
$iBrowseCol = 1;
$iBrowseProduct = 1;
// Calculating Products Per Row
$BrowseProducts_per_row = $this->perRow;
$Browsecellwidth = ' width'.floor ( 100 / $BrowseProducts_per_row );
// Separator
$verticalseparator = " vertical-separator";
// Count products
$BrowseTotalProducts = 0;
foreach ( $this->products as $product ) {
$BrowseTotalProducts ++;
}
?>
<table class="orders">
<tr>
<th>Naam</th>
<th>Prijs</th>
<th>Aantal</th>
<th> Voeg toe aan winkelwagen </th>
</tr>
<?php
// Start the Output
foreach ( $this->products as $product ) {
// Show the horizontal seperator
if ($iBrowseCol == 1 && $iBrowseProduct > $BrowseProducts_per_row) { ?>
<div class="horizontal-separator"></div>
<?php }
?>
<tr>
<td><?php echo JHTML::link($product->link, $product->product_name); ?></td>
<td><?php // Product Short Description
echo shopFunctionsF::limitStringByWord($product->product_s_desc, 40, '...') ?>
</td>
<td><?php echo $this->currency->createPriceDiv('basePrice','COM_VIRTUEMART_PRODUCT_BASEPRICE',$product->prices); ?> </td>
<td>
<form method="post" class="product" action="index.php" id="addtocartproduct<?php echo $product->virtuemart_product_id ?>">
<div class="addtocart-bar">
<?php echo $this->product->virtuemart_product_id;?>
<span class="quantity-box">
<input type="text" class="quantity-input" name="quantity[]" value="1" />
</span>
<span class="quantity-controls">
<input type="button" class="quantity-controls quantity-plus" />
<input type="button" class="quantity-controls quantity-minus" />
</span>
<?php // Display the quantity box END ?>
<?php // Add the button
$button_lbl = JText::_('COM_VIRTUEMART_CART_ADD_TO');
$button_cls = ''; //$button_cls = 'addtocart_button';
if (VmConfig::get('check_stock') == '1' && !$this->product->product_in_stock) {
$button_lbl = JText::_('COM_VIRTUEMART_CART_NOTIFY');
$button_cls = 'notify-button';
} ?>
<?php // Display the add to cart button ?>
<span class="addtocart-button">
<input type="submit" name="addtocart" class="addtocart-button" value="<?php echo $button_lbl ?>" title="<?php echo $button_lbl ?>" />
</span>
<div class="clear"></div>
</div>
<?php // Display the add to cart button END ?>
<input type="hidden" class="pname" value="<?php echo $product->product_name ?>">
<input type="hidden" name="option" value="com_virtuemart" />
<input type="hidden" name="view" value="cart" />
<noscript><input type="hidden" name="task" value="add" /></noscript>
<input type="hidden" name="virtuemart_product_id[]" value="<?php echo $product->virtuemart_product_id ?>" />
<?php /** @todo Handle the manufacturer view */ ?>
<input type="hidden" name="virtuemart_manufacturer_id" value="<?php echo $product->virtuemart_manufacturer_id ?>" />
<input type="hidden" name="virtuemart_category_id[]" value="<?php echo $product->virtuemart_category_id ?>" />
</form>
</td>
</tr>
<?php }
} // end of foreach ( $this->products as $product )
?>
</table></div><!-- end browse-view -->
Could anyone help me with inserting these custom fields into this code? I would really appreciate it!
Hi there,
for future user being able to find a more recent and reliable solution, see this one
https://forum.virtuemart.net/index.php?topic=116058.msg397587#msg397587
Add Custom Fields in category page:
Open file : components\com_virtuemart\views\category\tmpl\default.php
search this foreach loop in default.php file -----> foreach ($this->products as $product)
And add this code inside the foreach loop:
<?php
foreach($product->customfields as $custom){
echo "<b>";
echo $custom->custom_title;
echo "</b>: ";
echo $custom->custom_value;
echo "<br>";
}
?>
It's working for me............ :)