News:

Support the VirtueMart project and become a member

Main Menu

Custom fields on Category page

Started by axoicorp, June 28, 2012, 16:28:23 PM

Previous topic - Next topic

axoicorp

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:


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.

webiedesign

Did you get any further on this ? Anybody ? I need this to.
Mary

mikkidee

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.


webiedesign

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


mikkidee

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.

webiedesign

Yes, your version (thank you !) is working for me and updating the price.
Mary

_stu

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!

phpman

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 !

bytelord

#9
@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
Production: Joomla 2.5.8 | VM 2.0.14 | PHP 5.3.13
Testing     : Joomla 2.5.8 | VM 2.0.16 | PHP 5.3.8
Testing     : Joomla 2.5.8 |    VM 2.1   | PHP 5.3.8

- Don't Forget to mark thread as solved when it is solved!
- Please do not PM with support questions, use the forum!

ddavidd99021

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');
$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 == && $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 == && $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_desc40'...'?>

</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!



nilesh230

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............    :)