1. Уважаемые пользователи, прежде чем ответить в теме или создать новую,
    внимательно ознакомьтесь с правилами раздела

    Кому лень работать или руки не оттуда - пользуйтесь услугами специалистов
  2. Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.."

    Есть JED!!! Ищите там!!!

[Помощь] Настраиваемые поля атрибут корзины

Тема в разделе "Virtuemart", создана пользователем windows8, 20 мар 2013.

Информация :
  • Уважаемые пользователи, прежде чем ответить в теме или создать новую, внимательно ознакомьтесь с правилами раздела
  • Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.." Есть JED!!! Ищите там!!!
  • Аналоги ищите там же - на JED!!!
  • Новая версия? - У кого будет - тот выложит!
Статус темы:
Закрыта.
  1. windows8

    windows8 Создатель

    Регистр.:
    12 июл 2012
    Сообщения:
    22
    Симпатии:
    0
    Доброго времени суток.Требуется помощь в выводе атрибута корзины selectom, сейчас вывод работает через radio button, собственно вот Перейти по ссылке
    Помогите пожалуйста разобраться

    Сам файл customfilds.php вот
    PHP:
    <?php
    /**
     *
     * Description
     *
     * @package    VirtueMart
     * @subpackage
     * @author Max Milbers
     * @link http://www.virtuemart.net
     * @copyright Copyright (c) 2004 - 2010 VirtueMart Team. All rights reserved by the author.
     * @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: custom.php 3057 2011-04-19 12:59:22Z Electrocity $
     */
     
    // Check to ensure this file is included in Joomla!
    defined ('_JEXEC') or die('Restricted access');
     
    if (!
    class_exists ('VmModel')) {
    require(
    JPATH_VM_ADMINISTRATOR DS 'helpers' DS 'vmmodel.php');
    }
     
    /**
     * Model for VirtueMart Customs Fields
     *
     * @package        VirtueMart
     */
    class VirtueMartModelCustomfields extends VmModel {
     
    /**
    * constructs a VmModel
    * setMainTable defines the maintable of the model
    *
    * @author Max Milbers
    */
    //function __construct($modelName ='product') {
    function __construct ($modelName 'product') {
     
    parent::__construct ('virtuemart_customfield_id');
    $this->setMainTable ('product_customfields');
    }
     
     
    /**
    * Gets a single custom by virtuemart_customfield_id
    *
    * @param string $type
    * @param string $mime mime type of custom, use for exampel image
    * @return customobject
    */
    function getCustomfield () {
     
    $this->data $this->getTable ('product_customfields');
    $this->data->load ($this->_id);
     
    return 
    $this;
    }
     
    // **************************************************
    // Custom FIELDS
    //
     
    function getProductCustomsChilds ($childs) {
     
    $data = array();
    foreach (
    $childs as $child) {
    $query 'SELECT C.* , field.*
    FROM `#__virtuemart_product_customfields` AS field
    LEFT JOIN `#__virtuemart_customs` AS C ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id`
    WHERE `virtuemart_product_id` =' 
    . (int)$child->virtuemart_product_id;
    $query .= ' and C.field_type = "C" ';
     
    $this->_db->setQuery ($query);
    $child->field $this->_db->loadObject ();
    $customfield = new stdClass();
    $customfield->custom_value $child->virtuemart_product_id;
    $customfield->field_type 'C';
    $child->display $this->displayProductCustomfieldFE ($child$customfield);
    if (
    $child->field) {
    $data[] = $child;
    }
    }
    return 
    $data;
     
    }
     
    public function 
    getCustomParentTitle ($custom_parent_id) {
     
    $q 'SELECT custom_title FROM `#__virtuemart_customs` WHERE virtuemart_custom_id =' . (int)$custom_parent_id;
    $this->_db->setQuery ($q);
    return 
    $this->_db->loadResult ();
    }
     
    /** @return autorized Types of data **/
    function getField_types () {
     
    return array(
    'S' => 'COM_VIRTUEMART_CUSTOM_STRING',
                
    'I' => 'COM_VIRTUEMART_CUSTOM_INT',
                
    'P' => 'COM_VIRTUEMART_CUSTOM_PARENT',
                
    'B' => 'COM_VIRTUEMART_CUSTOM_BOOL',
                
    'D' => 'COM_VIRTUEMART_DATE',
                
    'T' => 'COM_VIRTUEMART_TIME',
                
    'M' => 'COM_VIRTUEMART_IMAGE',
                
    'V' => 'COM_VIRTUEMART_CUSTOM_CART_VARIANT',
                
    'A' => 'COM_VIRTUEMART_CHILD_GENERIC_VARIANT',
                
    'X' => 'COM_VIRTUEMART_CUSTOM_EDITOR',
                
    'Y' => 'COM_VIRTUEMART_CUSTOM_TEXTAREA',
                
    'E' => 'COM_VIRTUEMART_CUSTOM_EXTENSION'
    );
     
    // 'U'=>'COM_VIRTUEMART_CUSTOM_CART_USER_VARIANT',
    // 'C'=>'COM_VIRTUEMART_CUSTOM_PRODUCT_CHILD',
    // 'G'=>'COM_VIRTUEMART_CUSTOM_PRODUCT_CHILD_GROUP',
    //'R'=>'COM_VIRTUEMART_RELATED_PRODUCT',
    //'Z'=>'COM_VIRTUEMART_RELATED_CATEGORY',
    }
     
    static function 
    setParameterableByFieldType(&$table,$type=0){
     
    if(
    $type===0$type $table->field_type;
     
    $varsToPush self::getVarsToPush($type);
     
    if(!empty(
    $varsToPush)){
    $table->setParameterable('custom_param',$varsToPush,TRUE);
    }
     
    }
     
    static function 
    bindParameterableByFieldType(&$table,$type=0){
     
    if(
    $type===0$type $table->field_type;
     
    $varsToPush self::getVarsToPush($type);
     
    if(!empty(
    $varsToPush)){
    VmTable::bindParameterable($table,'custom_param',$varsToPush);
    }
     
    }
     
     
    static function 
    getVarsToPush($type){
     
    $varsToPush 0;
    if(
    $type=='A'){
    $varsToPush = array(
    'withParent'        => array(0'int'),
    'parentOrderable'   => array(0'int')
    );
    }
    return 
    $varsToPush;
    }
     
    private 
    $_hidden = array();
     
    /**
    * Use this to adjust the hidden fields of the displaycustomHandler to your form
    *
    * @author Max Milbers
    * @param string $name for exampel view
    * @param string $value for exampel custom
    */
    public function addHidden ($name$value '') {
     
    $this->_hidden[$name] = $value;
    }
     
    /**
    * Adds the hidden fields which are needed for the form in every case
    *
    * @author Max Milbers
    * OBSELTE ?
    */
    private function addHiddenByType ($datas) {
     
    $this->addHidden ('virtuemart_custom_id'$datas->virtuemart_custom_id);
    $this->addHidden ('option''com_virtuemart');
     
    }
     
    /**
    * Displays a possibility to select created custom
    *
    * @author Max Milbers
    * @author Patrick Kohl
    */
    public function displayCustomSelection () {
     
    $customslist $this->getCustomsList ();
    if (isset(
    $this->virtuemart_custom_id)) {
    $value $this->virtuemart_custom_id;
    }
    else {
    $value JRequest::getInt ('custom_parent_id'0);
    }
    return 
    VmHTML::row ('select''COM_VIRTUEMART_CUSTOM_PARENT''custom_parent_id'$customslist$value);
    }
     
    /**
    * Retrieve a list of layouts from the default and chosen templates directory.
    *
    * We may use here the getCustoms function of the custom model or write something simular
    *
    * @author Max Milbers
    * @param name of the view
    * @return object List of flypage objects
    */
    function getCustomsList ($publishedOnly FALSE) {
     
    $vendorId 1;
    // get custom parents
    $q 'SELECT virtuemart_custom_id as value ,custom_title as text FROM `#__virtuemart_customs` where custom_parent_id=0
    AND field_type <> "R" AND field_type <> "Z" '
    ;
    if (
    $publishedOnly) {
    $q .= 'AND `published`=1';
    }
    if (
    $ID JRequest::getInt ('virtuemart_custom_id'0)) {
    $q .= ' and `virtuemart_custom_id`!=' . (int)$ID;
    }
    //if (isset($this->virtuemart_custom_id)) $q.=' and virtuemart_custom_id !='.$this->virtuemart_custom_id;
    $this->_db->setQuery ($q);
    //$result = $this->_db->loadAssocList();
    $result $this->_db->loadObjectList ();
     
    $errMsg $this->_db->getErrorMsg ();
    $errs $this->_db->getErrors ();
     
    if (!empty(
    $errMsg)) {
    $app JFactory::getApplication ();
    $errNum $this->_db->getErrorNum ();
    $app->enqueueMessage ('SQL-Error: ' $errNum ' ' $errMsg);
    }
     
    if (
    $errs) {
    $app JFactory::getApplication ();
    foreach (
    $errs as $err) {
    $app->enqueueMessage ($err);
    }
    }
     
    return 
    $result;
    }
     
    /**
    * This displays a custom handler.
    *
    * @param string $html atttributes, Just for displaying the fullsized image
    */
    public function displayCustomFields ($datas) {
     
    $identify ''// ':'.$this->virtuemart_custom_id;
    if (!class_exists ('VmHTML')) {
    require(
    JPATH_VM_ADMINISTRATOR DS 'helpers' DS 'html.php');
    }
    if (
    $datas->field_type) {
    $this->addHidden ('field_type'$datas->field_type);
    }
    $this->addHiddenByType ($datas);
     
    //$html = '<div id="custom_title">'.$datas->custom_title.'</div>';
    $html "";
    //$html = ' <table class="admintable"> ';
     
    if (!class_exists ('Permissions')) {
    require(
    JPATH_VM_ADMINISTRATOR DS 'helpers' DS 'permissions.php');
    }
    if (!
    Permissions::getInstance ()->check ('admin')) {
    $readonly 'readonly';
    }
    else {
    $readonly '';
    }
    // only input when not set else display
    if ($datas->field_type) {
    $html .= VmHTML::row ('value''COM_VIRTUEMART_CUSTOM_FIELD_TYPE'$datas->field_types[$datas->field_type]);
    }
    else {
    $html .= VmHTML::row ('select''COM_VIRTUEMART_CUSTOM_FIELD_TYPE''field_type'$this->getOptions ($datas->field_types), $datas->field_typeVmHTML::validate ('R'));
    }
    $html .= VmHTML::row ('input''COM_VIRTUEMART_TITLE''custom_title'$datas->custom_titleVmHTML::validate ('S'));
    $html .= VmHTML::row ('booleanlist''COM_VIRTUEMART_PUBLISHED''published'$datas->published);
    $html .= VmHTML::row ('select''COM_VIRTUEMART_CUSTOM_PARENT''custom_parent_id'$this->getParentList ($datas->virtuemart_custom_id), $datas->custom_parent_id'');
    $html .= VmHTML::row ('booleanlist''COM_VIRTUEMART_CUSTOM_IS_CART_ATTRIBUTE''is_cart_attribute'$datas->is_cart_attribute);
    $html .= VmHTML::row ('input''COM_VIRTUEMART_DESCRIPTION''custom_field_desc'$datas->custom_field_desc);
    // change input by type
    $html .= VmHTML::row ('input''COM_VIRTUEMART_DEFAULT''custom_value'$datas->custom_value);
    $html .= VmHTML::row ('input''COM_VIRTUEMART_CUSTOM_TIP''custom_tip'$datas->custom_tip);
    $html .= VmHTML::row ('input''COM_VIRTUEMART_CUSTOM_LAYOUT_POS''layout_pos'$datas->layout_pos);
    //$html .= VmHTML::row('booleanlist','COM_VIRTUEMART_CUSTOM_PARENT','custom_parent_id',$this->getCustomsList(),  $datas->custom_parent_id,'');
    $html .= VmHTML::row ('booleanlist''COM_VIRTUEMART_CUSTOM_ADMIN_ONLY''admin_only'$datas->admin_only);
    $html .= VmHTML::row ('booleanlist''COM_VIRTUEMART_CUSTOM_IS_LIST''is_list'$datas->is_list);
    $html .= VmHTML::row ('booleanlist''COM_VIRTUEMART_CUSTOM_IS_HIDDEN''is_hidden'$datas->is_hidden);
     
    // $html .= '</table>';  removed
    $html .= VmHTML::inputHidden ($this->_hidden);
     
    return 
    $html;
    }
     
    /**
    * child classes can add their own options and you can get them with this function
    *
    * @param array $optionsarray
    */
    private function getOptions ($field_types) {
     
    $options = array();
    foreach (
    $field_types as $optionName=> $langkey) {
    $options[] = JHTML::('select.option'$optionNameJText::($langkey));
    }
    return 
    $options;
    }
     
    /**
    * Just for creating simpel rows
    *
    * @author Max Milbers
    * @param string $descr
    * @param string $name
    */
    private function displayRow ($descr$name$readonly '') {
     
    $html '<tr>
    <td class="labelcell">' 
    JText::($descr) . '</td>
    <td> <input type="text" ' 
    $readonly 'class="inputbox ' $readonly '" name="' $name '" size="70" value="' $this->$name '" /></td>
    </tr>'
    ;
    return 
    $html;
    }
     
    /**
    *
    * Enter description here ...
    *
    * @param unknown_type $excludedId
    * @return unknown|multitype:
    */
    function getParentList ($excludedId 0) {
     
    $this->_db->setQuery (' SELECT virtuemart_custom_id as value,custom_title as text FROM `#__virtuemart_customs` WHERE `field_type` ="P" and virtuemart_custom_id!=' $excludedId);
    if (
    $results $this->_db->loadObjectList ()) {
    return 
    $results;
    }
    else {
    return array();
    }
    }
     
    /**
    *
    * Enter description here ...
    */
    function getProductChildCustomRelation () {
     
    $this->_db->setQuery (' SELECT virtuemart_custom_id as value,custom_title as text FROM `#__virtuemart_customs` WHERE `field_type` ="C"');
    if (
    $results $this->_db->loadObjectList ()) {
    return 
    $results;
    }
    else {
    return array();
    }
    }
     
    /**
    *
    * Enter description here ...
    *
    * @param unknown_type $product_id
    * @return unknown
    */
    function getProductChildCustom ($product_id) {
     
    $this->_db->setQuery (' SELECT `virtuemart_custom_id`,`custom_value` FROM `#__virtuemart_product_customfields` WHERE  `virtuemart_product_id` =' . (int)$product_id);
    if (
    $childcustom $this->_db->loadObject ()) {
    return 
    $childcustom;
    }
    else {
    $childcustom->virtuemart_custom_id 0;
    $childcustom->custom_value '';
    return 
    $childcustom;
    }
    }
     
    /**
    *
    * Enter description here ...
    *
    * @param unknown_type $product_id
    * @return string|Ambigous <string, mixed, multitype:>
    */
    function getProductParentRelation ($product_id) {
     
    $this->_db->setQuery (' SELECT `custom_value` FROM `#__virtuemart_product_customfields` WHERE  `virtuemart_product_id` =' . (int)$product_id);
    if (
    $childcustom $this->_db->loadResult ()) {
    return 
    '(' $childcustom ')';
    }
    else {
    return 
    JText::('COM_VIRTUEMART_CUSTOM_NO_PARENT_RELATION');
    }
    }
     
    /**
    * AUthor Kohl Patrick
    * Load all custom fields for a Single product
    * return custom fields value and definition
    */
    public function getproductCustomslist ($virtuemart_product_id$parent_id NULL) {
     
    $query 'SELECT C.`virtuemart_custom_id` , `custom_element`, `custom_jplugin_id`, `custom_params`, `custom_parent_id` , `admin_only` , `custom_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_cart_attribute` , `is_hidden` , C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`,field.`custom_param`,field.`custom_price`,field.`ordering`
    FROM `#__virtuemart_customs` AS C
    LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id`
    Where `virtuemart_product_id` =' 
    $virtuemart_product_id ' order by field.`ordering` ASC';
    $this->_db->setQuery ($query);
    $productCustoms $this->_db->loadObjectList ();
    //if (!$productCustoms ) return array();
    if (!$productCustoms) {
    return;
    }
    $row 0;
    foreach (
    $productCustoms as $field) {
    if (
    $parent_id) {
    $field->custom_value "";
    $field->virtuemart_customfield_id "";
    $field->custom_param NULL;
    $virtuemart_product_id $parent_id;
    }
    if (
    $field->field_type == 'E') {
     
    JPluginHelper::importPlugin ('vmcustom');
    $dispatcher JDispatcher::getInstance ();
    $retValue $dispatcher->trigger ('plgVmDeclarePluginParams', array('custom'$field->custom_element$field->custom_jplugin_id$field));
     
    }else {
    VirtueMartModelCustomfields::bindParameterableByFieldType($field);
    }
    //vmdebug('fields',$field);
    $field->display $this->displayProductCustomfieldBE ($field$virtuemart_product_id$row); //custom_param without S !!!
    $row++;
    }
    return 
    $productCustoms;
    }
     
    /* Save and delete from database
    * all product custom_fields and xref
    @ var   $table: the xref table(eg. product,category ...)
    @array $data: array of customfields
    @int     $id: The concerned id (eg. product_id)
    */
    public function storeProductCustomfields($table,$datas$id) {
     
    //vmdebug('storeProductCustomfields',$datas);
    JRequest::checkToken() or jexit'Invalid Token, in store customfields');
    //Sanitize id
    $id = (int)$id;
     
    //Table whitelist
    $tableWhiteList = array('product','category','manufacturer');
    if(!
    in_array($table,$tableWhiteList)) return false;
     
     
    // Get old IDS
    $this->_db->setQuery'SELECT `virtuemart_customfield_id` FROM `#__virtuemart_'.$table.'_customfields` as `PC` WHERE `PC`.virtuemart_'.$table.'_id ='.$id );
    $old_customfield_ids $this->_db->loadResultArray();
     
     
    if (isset ( 
    $datas['custom_param'] )) $params true ;
    else 
    $params false ;
    if (
    array_key_exists('field'$datas)) {
    //vmdebug('datas save',$datas);
    $customfieldIds = array();
     
     
    foreach(
    $datas['field'] as $key => $fields){
    $fields['virtuemart_'.$table.'_id'] =$id;
    $tableCustomfields $this->getTable($table.'_customfields');
    $tableCustomfields->setPrimaryKey('virtuemart_product_id');
     
    if (!empty(
    $datas['custom_param'][$key]) and !isset($datas['clone']) ) {
    if (
    array_key_exists$key,$datas['custom_param'])) {
    $fields['custom_param'] = json_encode($datas['custom_param'][$key]);
    }
    }
     
    VirtueMartModelCustomfields::setParameterableByFieldType($tableCustomfields,$fields['field_type']);
    if(!isset(
    $datas['clone'])){
    VirtueMartModelCustomfields::bindParameterableByFieldType($tableCustomfields,$fields['field_type']);
    }
     
    $tableCustomfields->bindChecknStore($fields);
    $errors $tableCustomfields->getErrors();
     
    foreach(
    $errors as $error){
    vmError($error);
    }
    $key array_search($fields['virtuemart_customfield_id'], $old_customfield_ids );
    if (
    $key !== false ) unset( $old_customfield_ids$key ] );
    //vmdebug('datas clone',$old_customfield_ids,$fields);
    }
     
    }
     
    if ( 
    count($old_customfield_ids) ) {
    // delete old unused Customfields
    $this->_db->setQuery'DELETE FROM `#__virtuemart_'.$table.'_customfields` WHERE `virtuemart_customfield_id` in ("'.implode('","'$old_customfield_ids ).'") ');
    $this->_db->query();
    }
     
     
    JPluginHelper::importPlugin('vmcustom');
    $dispatcher JDispatcher::getInstance();
    if (
    is_array($datas['plugin_param'])) {
    foreach (
    $datas['plugin_param'] as $key => $plugin_param ) {
    $dispatcher->trigger('plgVmOnStoreProduct', array($datas$plugin_param ));
    }
    }
     
    }
     
     
    /**
    * Formatting admin display by roles
    * input Types for product only !
    * $field->is_cart_attribute if can have a price
    */
    public function displayProductCustomfieldBE ($field$product_id$row) {
     
    $field->custom_value = empty($field->custom_value) ? $field->value $field->custom_value;
     
    if (
    $field->is_cart_attribute) {
    $priceInput '<input type="text" value="' . (isset($field->custom_price) ? $field->custom_price '0') . '" name="field[' $row '][custom_price]" />';
    }
    else {
    $priceInput ' ';
    }
     
    if (
    $field->is_list) {
    $options = array();
    $values explode (';'$field->custom_value);
     
    foreach (
    $values as $key => $val) {
    $options[] = array('value' => $val'text' => $val);
    }
     
    return 
    JHTML::('select.genericlist'$options'field[' $row '][custom_value]') . '</td><td>' $priceInput;
    }
    else {
     
    switch (
    $field->field_type) {
     
    case 
    'A':
    //vmdebug('displayProductCustomfieldBE $field',$field);
    if(!isset($field->withParent)) $field->withParent 0;
    if(!isset(
    $field->parentOrderable)) $field->parentOrderable 0;
    //vmdebug('displayProductCustomfieldFE',$field);
    if (!class_exists('VmHTML')) require(JPATH_VM_ADMINISTRATOR.DS.'helpers'.DS.'html.php');
    $html JText::_('COM_VIRTUEMART_CUSTOM_WP').VmHTML::checkbox('field[' $row '][withParent]',$field->withParent,1,0,'').'<br />';
    $html .= JText::_('COM_VIRTUEMART_CUSTOM_PO').VmHTML::checkbox('field[' $row '][parentOrderable]',$field->parentOrderable,1,0,'');
     
    $options = array();
    //$options[] = array( 'value' => 'product_name' ,'text' =>JText::_('COM_VIRTUEMART_PRODUCT_FORM_NAME')); Is anyway displayed there
    $options[] = array('value' => 'product_sku''text' => JText::('COM_VIRTUEMART_PRODUCT_FORM_SKU'));
    $options[] = array('value' => 'slug''text' => JText::('COM_VIRTUEMART_PRODUCT_FORM_ALIAS'));
    $options[] = array('value' => 'product_length''text' => JText::('COM_VIRTUEMART_PRODUCT_LENGTH'));
    $options[] = array('value' => 'product_width''text' => JText::('COM_VIRTUEMART_PRODUCT_WIDTH'));
    $options[] = array('value' => 'product_height''text' => JText::('COM_VIRTUEMART_PRODUCT_HEIGHT'));
    $options[] = array('value' => 'product_weight''text' => JText::('COM_VIRTUEMART_PRODUCT_WEIGHT'));
     
    $html .= JHTML::('select.genericlist'$options'field[' $row '][custom_value]''''value''text'$field->custom_value) . '</td><td>' $priceInput;
    return 
    $html;
    //return 'Automatic Childvariant creation (later you can choose here attributes to show, now product name) </td><td>';
    break;
    // variants
    case 'V':
    return 
    '<input type="text" value="' $field->custom_value '" name="field[' $row '][custom_value]" /></td><td>' $priceInput;
    break;
    /*
    * Stockable (group of) child variants
    * Special type setted by the plugin
    */
    case 'G':
    return;
    break;
    /*Extended by plugin*/
    case 'E':
     
    $html '<input type="hidden" value="' $field->value '" name="field[' $row '][custom_value]" />';
    if (!
    class_exists ('vmCustomPlugin')) {
    require(
    JPATH_VM_PLUGINS DS 'vmcustomplugin.php');
    }
    JPluginHelper::importPlugin ('vmcustom'$field->custom_element);
    $dispatcher JDispatcher::getInstance ();
    $retValue '';
    $dispatcher->trigger ('plgVmOnProductEdit', array($field$product_id, &$row, &$retValue));
     
    return 
    $html $retValue $priceInput;
    break;
    case 
    'D':
    return 
    vmJsApi::jDate ($field->custom_value'field[' $row '][custom_value]''field_' $row '_customvalue') . $priceInput;
    break;
    case 
    'T':
    //TODO Patrick
    return '<input type="text" value="' $field->custom_value '" name="field[' $row '][custom_value]" /></td><td>' $priceInput;
    break;
    /* string or integer */
    case 'S':
    case 
    'I':
    return 
    '<input type="text" value="' $field->custom_value '" name="field[' $row '][custom_value]" /></td><td>' $priceInput;
    break;
    case 
    'I':
    return 
    '<input type="text" value="' $field->custom_value '" name="field[' $row '][custom_value]" /></td><td>' $priceInput;
    break;
    //'X'=>'COM_VIRTUEMART_CUSTOM_EDITOR',
    case 'X':
    return 
    '<textarea class="mceInsertContentNew" name="field[' $row '][custom_value]" id="field-' $row '-custom_value">' $field->custom_value '</textarea>
    <script type="text/javascript">// Creates a new editor instance
    tinymce.execCommand("mceAddControl",true,"field-' 
    $row '-custom_value")
    </script></td><td>' 
    $priceInput;
    //return '<input type="text" value="'.$field->custom_value.'" name="field['.$row.'][custom_value]" /></td><td>'.$priceInput;
    break;
    //'Y'=>'COM_VIRTUEMART_CUSTOM_TEXTAREA'
    case 'Y':
    return 
    '<textarea id="field[' $row '][custom_value]" name="field[' $row '][custom_value]" class="inputbox" cols=80 rows=50 >' $field->custom_value '</textarea></td><td>' $priceInput;
    //return '<input type="text" value="'.$field->custom_value.'" name="field['.$row.'][custom_value]" /></td><td>'.$priceInput;
    break;
     
    case 
    'editorta':
    jimport ('joomla.html.editor');
    $editor JFactory::getEditor ();
    //TODO This is wrong!
    $_return['fields'][$_fld->name]['formcode'] = $editor->display ($_prefix $_fld->name$_return['fields'][$_fld->name]['value'], 300150$_fld->cols$_fld->rows);
    break;
    /* bool */
    case 'B':
    return 
    JHTML::('select.booleanlist''field[' $row '][custom_value]''class="inputbox"'$field->custom_value) . '</td><td>' $priceInput;
    break;
    /* parent */
    case 'P':
    return 
    $field->custom_value '<input type="hidden" value="' $field->custom_value '" name="field[' $row '][custom_value]" /></td><td>';
    break;
    /* related category*/
    case 'Z':
    if (!
    $field->custom_value) {
    return 
    '';
    // special case it's category ID !
    $q 'SELECT * FROM `#__virtuemart_categories_' VMLANG '` JOIN `#__virtuemart_categories` AS p using (`virtuemart_category_id`) WHERE `published`=1 AND `virtuemart_category_id`= "' . (int)$field->custom_value '" ';
    $this->_db->setQuery ($q);
    //echo $this->_db->_sql;
    if ($category $this->_db->loadObject ()) {
    $q 'SELECT `virtuemart_media_id` FROM `#__virtuemart_category_medias` WHERE `virtuemart_category_id`= "' . (int)$field->custom_value '" ';
    $this->_db->setQuery ($q);
    $thumb '';
    if (
    $media_id $this->_db->loadResult ()) {
    $thumb $this->displayCustomMedia ($media_id);
    }
    $display '<input type="hidden" value="' $field->custom_value '" name="field[' $row '][custom_value]" />';
    return 
    $display JHTML::link (JRoute::('index.php?option=com_virtuemart&view=category&task=edit&virtuemart_category_id=' . (int)$field->custom_value), $thumb ' ' $category->category_name, array('title' => $category->category_name)) . $display;
    }
    else {
    return 
    'no result';
    }
    /* related product*/
    case 'R':
    if (!
    $field->custom_value) {
    return 
    '';
    }
    $q 'SELECT `product_name`,`product_sku`,`product_s_desc` FROM `#__virtuemart_products_' VMLANG '` as l JOIN `#__virtuemart_products` AS p using (`virtuemart_product_id`) WHERE `virtuemart_product_id`=' . (int)$field->custom_value;
    $this->_db->setQuery ($q);
    $related $this->_db->loadObject ();
    $display $related->product_name '(' $related->product_sku ')';
    $display '<input type="hidden" value="' $field->custom_value '" name="field[' $row '][custom_value]" />';
     
    $q 'SELECT `virtuemart_media_id` FROM `#__virtuemart_product_medias`WHERE `virtuemart_product_id`= "' . (int)$field->custom_value '" AND (`ordering` = 0 OR `ordering` = 1)';
    $this->_db->setQuery ($q);
    $thumb '';
    if (
    $media_id $this->_db->loadResult ()) {
    $thumb $this->displayCustomMedia ($media_id);
    }
    return 
    $display JHTML::link (JRoute::('index.php?option=com_virtuemart&view=product&task=edit&virtuemart_product_id=' $field->custom_value), $thumb '<br /> ' $related->product_name, array('title' => $related->product_name '<br/>' $related->product_s_desc));
    break;
    /* image */
    case 'M':
    if (empty(
    $product)) {
    $vendorId 1;
    }
    else {
    $vendorId $product->virtuemart_vendor_id;
    }
    $q 'SELECT `virtuemart_media_id` as value,`file_title` as text FROM `#__virtuemart_medias` WHERE `published`=1
    AND (`virtuemart_vendor_id`= "' 
    $vendorId '" OR `shared` = "1")';
    $this->_db->setQuery ($q);
    $options $this->_db->loadObjectList ();
    return 
    JHTML::('select.genericlist'$options'field[' $row '][custom_value]''''value''text'$field->custom_value) . '</td><td>' $priceInput;
    break;
    /* Child product Group */
    case 'G':
    break;
    /* Child product */
    /*case 'C':
    if (empty($product)){
      $virtuemart_product_id = JRequest::getInt('virtuemart_product_id', 0);
      } else {
      $virtuemart_product_id = $product->virtuemart_product_id;
      }
      $html = '';
      $q='SELECT concat(`product_sku`,":",`product_name`) as text ,`virtuemart_product_id`,`product_in_stock` FROM `#__virtuemart_products` WHERE `published`=1
      AND `virtuemart_product_id`= "'.$field->custom_value.'"';
      //$db->setQuery(' SELECT virtuemart_product_id, product_name FROM `#__virtuemart_products` WHERE `product_parent_id` ='.(int)$product_id);
      $this->_db->setQuery($q);
      if ($child = $this->_db->loadObject()) {
      $html .= JHTML::link ( JRoute::_ ( 'index.php?option=com_virtuemart&view=product&task=edit&virtuemart_product_id='.$field->custom_value), $child->text.' ('.$field->custom_value.')', array ('title' => $child->text ));
      $html .= ' '.JText::_('COM_VIRTUEMART_PRODUCT_FORM_IN_STOCK').':'.$child->product_in_stock ;
      $html .= '<input type="hidden" value="'.$child->virtuemart_product_id.'" name="field['.$row.'][custom_value]" /></div><div>'.$priceInput;
      return $html;
      //return '<input type="text" value="'.$field->custom_value.'" name="field['.$row.'][custom_value]" />';
      }
      else return JText::_('COM_VIRTUEMART_CUSTOM_NO_CHILD_PRODUCT');
      break;*/
    }
     
    }
    }
     
    public function 
    getProductCustomsField ($product) {
     
    $query 'SELECT C.`virtuemart_custom_id` , `custom_element`, `custom_params`, `custom_parent_id` , `admin_only` , `custom_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_hidden`, `layout_pos`, C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`, field.`custom_param`, field.`custom_price`, field.`ordering`
    FROM `#__virtuemart_customs` AS C
    LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id`
    Where `virtuemart_product_id` =' 
    . (int)$product->virtuemart_product_id ' and `field_type` != "G" and `field_type` != "R" and `field_type` != "Z"';
    $query .= ' and is_cart_attribute = 0 order by field.`ordering`,virtuemart_custom_id';
    $this->_db->setQuery ($query);
    if (
    $productCustoms $this->_db->loadObjectList ()) {
     
    $row 0;
    if (!
    class_exists ('vmCustomPlugin')) {
    require(
    JPATH_VM_PLUGINS DS 'vmcustomplugin.php');
    }
    foreach (
    $productCustoms as $field) {
    if (
    $field->field_type == "E") {
    $field->display '';
    JPluginHelper::importPlugin ('vmcustom');
    $dispatcher JDispatcher::getInstance ();
    $ret $dispatcher->trigger ('plgVmOnDisplayProductFE', array($product, &$row, &$field));
     
    }
    else {
    $field->display $this->displayProductCustomfieldFE ($product$field$row);
    }
    $row++;
    }
    return 
    $productCustoms;
    }
    else {
    return array();
    }
    }
     
    public function 
    getProductCustomsFieldRelatedCategories ($product) {
     
    $query 'SELECT C.`virtuemart_custom_id` , `custom_parent_id` , `admin_only` , `custom_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_hidden` , C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`, field.`custom_param`, field.`custom_price`, field.`ordering`
    FROM `#__virtuemart_customs` AS C
    LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id`
    Where `virtuemart_product_id` =' 
    . (int)$product->virtuemart_product_id ' and `field_type` = "Z"';
    $query .= ' and is_cart_attribute = 0 order by virtuemart_custom_id';
    $this->_db->setQuery ($query);
    if (
    $productCustoms $this->_db->loadObjectList ()) {
    $row 0;
    foreach (
    $productCustoms as & $field) {
    $field->display $this->displayProductCustomfieldFE ($product$field$row);
    $row++;
    }
    return 
    $productCustoms;
    }
    else {
    return array();
    }
    }
     
    public function 
    getProductCustomsFieldRelatedProducts ($product) {
     
    $query 'SELECT C.`virtuemart_custom_id` , `custom_parent_id` , `admin_only` , `custom_title` , `custom_tip` , C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_hidden` , C.`published` , field.`virtuemart_customfield_id` , field.`custom_value`, field.`custom_param`, field.`custom_price`, field.`ordering`
    FROM `#__virtuemart_customs` AS C
    LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id`
    Where `virtuemart_product_id` =' 
    . (int)$product->virtuemart_product_id ' and `field_type` = "R"';
    $query .= ' and is_cart_attribute = 0 order by virtuemart_custom_id';
    $this->_db->setQuery ($query);
    if (
    $productCustoms $this->_db->loadObjectList ()) {
    $row 0;
    foreach (
    $productCustoms as & $field) {
    $field->display $this->displayProductCustomfieldFE ($product$field$row);
    $row++;
    }
    return 
    $productCustoms;
    }
    else {
    return array();
    }
    }
     
    /**
    * Display for the cart
    *
    * @author Patrick Kohl
    * @param obj $product product object
    * @return html code
    */
    public function getProductCustomsFieldCart ($product) {
     
    // group by virtuemart_custom_id
    $query 'SELECT C.`virtuemart_custom_id`, `custom_title`, C.`custom_value`,`custom_field_desc` ,`custom_tip`,`field_type`,field.`virtuemart_customfield_id`,`is_hidden`
    FROM `#__virtuemart_customs` AS C
    LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id`
    Where `virtuemart_product_id` =' 
    . (int)$product->virtuemart_product_id ' and `field_type` != "G" and `field_type` != "R" and `field_type` != "Z"';
    $query .= ' and is_cart_attribute = 1 group by virtuemart_custom_id ORDER BY field.`ordering`';
     
    $this->_db->setQuery ($query);
    $groups $this->_db->loadObjectList ();
     
    if (!
    class_exists ('VmHTML')) {
    require(
    JPATH_VM_ADMINISTRATOR DS 'helpers' DS 'html.php');
    }
    $row 0;
    if (!
    class_exists ('CurrencyDisplay')) {
    require(
    JPATH_VM_ADMINISTRATOR DS 'helpers' DS 'currencydisplay.php');
    }
    $currency CurrencyDisplay::getInstance ();
     
    if (!
    class_exists ('calculationHelper')) {
    require(
    JPATH_VM_ADMINISTRATOR DS 'helpers' DS 'calculationh.php');
    }
    $calculator calculationHelper::getInstance ();
    if (!
    class_exists ('vmCustomPlugin')) {
    require(
    JPATH_VM_PLUGINS DS 'vmcustomplugin.php');
    }
     
    $free JText::('COM_VIRTUEMART_CART_PRICE_FREE');
    // render select list
    foreach ($groups as $group) {
     
    //$query='SELECT  field.`virtuemart_customfield_id` as value ,concat(field.`custom_value`," :bu ", field.`custom_price`) AS text
    $query 'SELECT field.`virtuemart_product_id`, `custom_params`,`custom_element`, field.`virtuemart_custom_id`,
    field.`virtuemart_customfield_id`,field.`custom_value`, field.`custom_price`, field.`custom_param`
    FROM `#__virtuemart_customs` AS C
    LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id`
    Where `virtuemart_product_id` =' 
    . (int)$product->virtuemart_product_id;
    $query .= ' and is_cart_attribute = 1 and C.`virtuemart_custom_id`=' . (int)$group->virtuemart_custom_id;
     
    // We want the field to be ordered as the user defined
    $query .= ' ORDER BY field.`ordering`';
     
    $this->_db->setQuery ($query);
    $options $this->_db->loadObjectList ();
    //vmdebug('getProductCustomsFieldCart options',$options);
    $group->options = array();
    foreach (
    $options as $option) {
    $group->options[$option->virtuemart_customfield_id] = $option;
    }
     
    if (
    $group->field_type == 'V') {
    $default current ($group->options);
    foreach (
    $group->options as $productCustom) {
    if ((float)
    $productCustom->custom_price) {
    $price strip_tags ($currency->priceDisplay ($calculator->calculateCustomPriceWithTax ($productCustom->custom_price)));
    }
    else {
    $price = ($productCustom->custom_price === '') ? '' $free;
    }
    $productCustom->text $productCustom->custom_value ' ' $price;
     
    }
    $group->display VmHTML::select ('customPrice[' $row '][' $group->virtuemart_custom_id ']'$group->options$default->custom_value'''virtuemart_customfield_id''text'FALSE);
    }
    else {
    if (
    $group->field_type == 'G') {
    $group->display .= ''// no direct display done by plugin;
    }
    else {
    if (
    $group->field_type == 'E') {
    $group->display '';
     
    foreach (
    $group->options as $k=> $productCustom) {
    if ((float)
    $productCustom->custom_price) {
    $price $currency->priceDisplay ($calculator->calculateCustomPriceWithTax ($productCustom->custom_price));
    }
    else {
    $price = ($productCustom->custom_price === '') ? '' $free;
    }
    $productCustom->text $productCustom->custom_value ' ' $price;
    $productCustom->virtuemart_customfield_id $k;
    if (!
    class_exists ('vmCustomPlugin')) {
    require(
    JPATH_VM_PLUGINS DS 'vmcustomplugin.php');
    }
     
    //legacy, it will be removed 2.2
    $productCustom->value $productCustom->virtuemart_customfield_id;
    JPluginHelper::importPlugin ('vmcustom');
    $dispatcher JDispatcher::getInstance ();
    $fieldsToShow $dispatcher->trigger ('plgVmOnDisplayProductVariantFE', array($productCustom, &$row, &$group));
     
    //$group->display .= '<input type="hidden" value="' . $k . '" name="customPrice[' . $row . '][' . $group->virtuemart_custom_id . ']" /> ';
    $group->display .= '<input type="hidden" value="' $productCustom->virtuemart_customfield_id '" name="customPrice[' $row '][' $productCustom->virtuemart_custom_id ']" /> ';
    if (!empty(
    $currency->_priceConfig['variantModification'][0]) and $price !== '') {
    $group->display .= '<div class="price-plugin">' JText::('COM_VIRTUEMART_CART_PRICE') . '<span class="price-plugin">' $price '</span></div>';
    }
    $row++;
    }
    $row--;
    }
    else {
    if (
    $group->field_type == 'U') {
    foreach (
    $group->options as $productCustom) {
    if ((float)
    $productCustom->custom_price) {
    $price $currency->priceDisplay ($calculator->calculateCustomPriceWithTax ($productCustom->custom_price));
    }
    else {
    $price = ($productCustom->custom_price === '') ? '' $free;
    }
    $productCustom->text $productCustom->custom_value ' ' $price;
     
    $group->display .= '<input type="text" value="' JText::($productCustom->custom_value) . '" name="customPrice[' $row '][' $group->virtuemart_custom_id '][' $productCustom->value ']" /> ';
    if (!empty(
    $currency->_priceConfig['variantModification'][0]) and $price !== '') {
    $group->display .= '<div class="price-plugin">' JText::('COM_VIRTUEMART_CART_PRICE') . '<span class="price-plugin">' $price '</span></div>';
    }
    }
    }
    else {
    if (
    $group->field_type == 'A') {
    $group->display '';
    foreach (
    $group->options as $productCustom) {
    /*if ((float)$productCustom->custom_price) {
    $price = $currency->priceDisplay ($calculator->calculateCustomPriceWithTax ($productCustom->custom_price));
    }
    else {
    $price = ($productCustom->custom_price === '') ? '' : $free;
    }*/
    $productCustom->field_type $group->field_type;
    $productCustom->is_cart 1;
    $group->display .= $this->displayProductCustomfieldFE ($product$productCustom$row);
    $checked '';
    }
    }
    else {
     
    $group->display '';
    $checked 'checked="checked"';
    foreach (
    $group->options as $productCustom) {
    //vmdebug('getProductCustomsFieldCart',$productCustom);
    if ((float)$productCustom->custom_price) {
    $price $currency->priceDisplay ($calculator->calculateCustomPriceWithTax ($productCustom->custom_price));
    }
    else {
    $price = ($productCustom->custom_price === '') ? '' $free;
    }
    $productCustom->field_type $group->field_type;
    $productCustom->is_cart 1;
    //$group->display .= '<input id="' . $productCustom->virtuemart_custom_id . '" ' . $checked . ' type="radio" value="' .
    //$productCustom->virtuemart_custom_id . '" name="customPrice[' . $row . '][' . $productCustom->virtuemart_customfield_id . ']" /><label
    //for="' . $productCustom->virtuemart_custom_id . '">' . $this->displayProductCustomfieldFE ($productCustom, $row) . ' ' . $price . '</label>';
    //MarkerVarMods
    $group->display .= '<input id="' $productCustom->virtuemart_custom_id '" ' $checked ' type="radio" value="' .
    $productCustom->virtuemart_customfield_id '" name="customPrice[' $row '][' $productCustom->virtuemart_custom_id ']" /><label
    for="' 
    $productCustom->virtuemart_custom_id '">' $this->displayProductCustomfieldFE ($product$productCustom$row) . ' ' $price '</label>';
     
    $checked '';
    }
    }
    }
    }
    }
    }
    $row++;
    }
     
    return 
    $groups;
     
    }
     
    /**
    * Formating front display by roles
    *  for product only !
    */
    public function displayProductCustomfieldFE (&$product$customfield$row '') {
     
    $virtuemart_custom_id = isset($customfield->virtuemart_custom_id)? $customfield->virtuemart_custom_id:0;
    $value $customfield->custom_value;
    $type $customfield->field_type;
    $is_list = isset($customfield->is_list)? $customfield->is_list:0;
    $price = isset($customfield->custom_price)? $customfield->custom_price:0;
    $is_cart = isset($customfield->is_cart)? $customfield->is_cart:0;
     
     
    //vmdebug('displayProductCustomfieldFE and here is something wrong ',$customfield);
     
    if (!class_exists ('CurrencyDisplay'))
    require(
    JPATH_VM_ADMINISTRATOR DS 'helpers' DS 'currencydisplay.php');
    $currency CurrencyDisplay::getInstance ();
     
    if (
    $is_list 0) {
    $values explode (';'$value);
    if (
    $is_cart != 0) {
     
    $options = array();
     
    foreach (
    $values as $key => $val) {
    $options[] = array('value' => $val'text' => $val);
    }
    vmdebug('displayProductCustomfieldFE is a list ',$options);
    return 
    JHTML::('select.genericlist'$options'field[' $row '][custom_value]'NULL'value''text'FALSETRUE);
    }
    else {
    $html '';
    //if($type=='M'){
    //foreach ($values as $key => $val){
    //$html .= '<div id="custom_'.$virtuemart_custom_id.'_'.$val.'" >'.$this->displayCustomMedia($val).'</div>';
    //}
     
    //} else {
    //foreach ($values as $key => $val){
    $html .= '<div id="custom_' $virtuemart_custom_id '_' $value '" >' $value '</div>';
    //}
    //}
     
    return $html;
    }
     
    }
    else {
    if (
    $price 0) {
     
    $price $currency->priceDisplay ((float)$price);
    }
    switch (
    $type) {
     
    case 
    'A':
     
    $options = array();
     
    $session JFactory::getSession ();
    $virtuemart_category_id $session->get ('vmlastvisitedcategoryid'0'vm');
     
    $productModel VmModel::getModel ('product');
     
    //parseCustomParams
    VirtueMartModelCustomfields::bindParameterableByFieldType($customfield);
    //Todo preselection as dropdown of children
    //Note by Max Milbers: This is not necessary, in this case it is better to unpublish the parent and to give the child which should be preselected a category
    //Or it is withParent, in that case there exists the case, that a parent should be used as a kind of mini category and not be orderable.
    //There exists already other customs and in special plugins which wanna disable or change the add to cart button.
    //I suggest that we manipulate the button with a message "choose a variant first"
    //if(!isset($customfield->pre_selected)) $customfield->pre_selected = 0;
    $selected JRequest::getInt ('virtuemart_product_id',0);
     
    $html '';
    $uncatChildren $productModel->getUncategorizedChildren ($customfield->withParent);
     
    foreach (
    $uncatChildren as $k => $child) {
    $options[] = array('value' => JRoute::('index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id=' $virtuemart_category_id '&virtuemart_product_id=' $child['virtuemart_product_id']), 'text' => $child['product_name']);
    }
     
    $html .= JHTML::('select.genericlist'$options'field[' $row '][custom_value]''onchange="window.top.location.href=this.options[this.selectedIndex].value" size="1" class="inputbox"'"value""text",
    JRoute::('index.php?option=com_virtuemart&view=productdetails&virtuemart_category_id=' $virtuemart_category_id '&virtuemart_product_id=' $selected));
    //vmdebug('$customfield',$customfield);
    if($customfield->parentOrderable==and $product->product_parent_id==0){
    //vmdebug('Should not be orderable');
    $product->orderable FALSE;
    /*if(!$productModel->product_parent_id){
    vmdebug('$customfield parentOrderable');
    $document = JFactory::getDocument();
    $document->addScriptDeclaration(
    'jQuery(document).ready( function($) {
     
    addToCartArea = jQuery(".productdetails-view .addtocart-bar");
    addToCartBar = addToCartArea.find("input[name$=addtocart]");
     
    addToCartArea.css({
    padding: "0px 0px 0px 0px",
    width: "auto"
    }).children("span:not(:nth-child(3))").hide()
    .parent().children("span::nth-child(3)").css({
    margin: "0px 0px 0px 0px",
    width: "auto",
    float:"left"
    });
     
    addToCartButtonClassName = addToCartBar.attr("class");
     
    addToCartBar.removeClass(addToCartButtonClassName)
    .addClass(addToCartButtonClassName + "-disabled")
    .attr({
    disabled: "disabled",
    value:"'.JText::_('COM_VIRTUEMART_ADDTOCART_CHOOSE_VARIANT').'",
    });
    });
    ');
    }*/
    }
     
    return 
    $html;
    break;
     
    /* variants*/
    case 'V':
    if (
    $price == 0)
    $price JText::('COM_VIRTUEMART_CART_PRICE_FREE');
     
    /* Loads the product price details */
    return '<input type="text" value="' JText::($value) . '" name="field[' $row '][custom_value]" /> ' JText::('COM_VIRTUEMART_CART_PRICE') . $price ' ';
    break;
    /*Date variant*/
    case 'D':
    return 
    '<span class="product_custom_date">' vmJsApi::date ($value'LC1'TRUE) . '</span>'//vmJsApi::jDate($field->custom_value, 'field['.$row.'][custom_value]','field_'.$row.'_customvalue').$priceInput;
    break;
    /* text area or editor No JText, only displayed in BE */
    case 'X':
    case 
    'Y':
    return 
    $value;
    break;
    /* string or integer */
    case 'S':
    case 
    'I':
    return 
    JText::($value);
    break;
    /* bool */
    case 'B':
    if (
    $value == 0)
    return 
    JText::('COM_VIRTUEMART_NO');
    return 
    JText::('COM_VIRTUEMART_YES');
    break;
    /* parent */
    case 'P':
    return 
    '<span class="product_custom_parent">' JText::($value) . '</span>';
    break;
    /* related */
    case 'R':
    $q 'SELECT l.`product_name`, p.`product_parent_id` , l.`product_name`, x.`virtuemart_category_id` FROM `#__virtuemart_products_' VMLANG '` as l
    JOIN `#__virtuemart_products` AS p using (`virtuemart_product_id`)
    LEFT JOIN `#__virtuemart_product_categories` as x on x.`virtuemart_product_id` = p.`virtuemart_product_id`
    WHERE p.`published`=1 AND  p.`virtuemart_product_id`= "' 
    . (int)$value '" ';
    $this->_db->setQuery ($q);
    $related $this->_db->loadObject ();
    if (empty (
    $related))
    return 
    '';
    $thumb '';
    $q 'SELECT `virtuemart_media_id` FROM `#__virtuemart_product_medias`WHERE `virtuemart_product_id`= "' . (int)$value '" AND (`ordering` = 0 OR `ordering` = 1)';
    $this->_db->setQuery ($q);
    if (
    $media_id $this->_db->loadResult ()) {
    $thumb $this->displayCustomMedia ($media_id);
    return 
    JHTML::link (JRoute::('index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=' $value '&virtuemart_category_id=' $related->virtuemart_category_id), $thumb ' ' $related->product_name, array('title' => $related->product_name));
    }
    break;
    /* image */
    case 'M':
    return 
    $this->displayCustomMedia ($value);
    break;
    /* categorie */
    case 'Z':
    $q 'SELECT * FROM `#__virtuemart_categories_' VMLANG '` as l JOIN `#__virtuemart_categories` AS c using (`virtuemart_category_id`) WHERE `published`=1 AND l.`virtuemart_category_id`= "' . (int)$value '" ';
    $this->_db->setQuery ($q);
    if (
    $category $this->_db->loadObject ()) {
    $q 'SELECT `virtuemart_media_id` FROM `#__virtuemart_category_medias`WHERE `virtuemart_category_id`= "' $category->virtuemart_category_id '" ';
    $this->_db->setQuery ($q);
    $thumb '';
    if (
    $media_id $this->_db->loadResult ()) {
    $thumb $this->displayCustomMedia ($media_id);
    }
    return 
    JHTML::link (JRoute::('index.php?option=com_virtuemart&view=category&virtuemart_category_id=' $category->virtuemart_category_id), $thumb ' ' $category->category_name, array('title' => $category->category_name));
    }
    else return 
    '';
    /* Child Group list
     * this have no direct display , used for stockable product
    */
    case 'G':
    return 
    ''//'<input type="text" value="'.JText::_($value).'" name="field['.$row.'][custom_value]" /> '.JText::_('COM_VIRTUEMART_CART_PRICE').' : '.$price .' ';
    break;
    break;
    }
    }
    }
     
    function 
    displayCustomMedia ($media_id$table 'product'$absUrl FALSE) {
     
    if (!
    class_exists ('TableMedias'))
    require(
    JPATH_VM_ADMINISTRATOR DS 'tables' DS 'medias.php');
    //$data = $this->getTable('medias');
    $db JFactory::getDBO ();
    $data = new TableMedias($db);
    $data->load ((int)$media_id);
     
    if (!
    class_exists ('VmMediaHandler'))
    require(
    JPATH_VM_ADMINISTRATOR DS 'helpers' DS 'mediahandler.php');
    $media VmMediaHandler::createMedia ($data$table);
     
    return 
    $media->displayMediaThumb (''FALSE''TRUETRUE$absUrl);
     
    }
     
    /**
    * There are too many functions doing almost the same for my taste
    * the results are sometimes slighty different and makes it hard to work with it, therefore here the function for future proxy use
    *
    */
    public function customFieldDisplay ($product$variantmods$html$trigger) {
     
    //vmdebug('customFieldDisplay $variantmods',$variantmods);
    $row 0;
    if (!
    class_exists ('shopFunctionsF'))
    require(
    JPATH_VM_SITE DS 'helpers' DS 'shopfunctionsf.php');
    //MarkerVarMods
    foreach ($variantmods as $selected => $variant) {
    //foreach ($variantmods as $variant=> $selected) {
    //vmdebug('customFieldDisplay '.$variant.' '.$selected);
    if ($selected) {
     
    $productCustom self::getProductCustomField ($selected);
    //vmdebug('customFieldDisplay',$selected,$productCustom);
    if (!empty($productCustom)) {
    $html .= ' <span class="product-field-type-' $productCustom->field_type '">';
    if (
    $productCustom->field_type == "E") {
     
    $product self::addParam ($product);
    $product->productCustom $productCustom;
    //vmdebug('CustomsFieldCartDisplay $productCustom',$productCustom);
    //vmdebug('customFieldDisplay $product->param selected '.$selected,$product->param);
    if (!class_exists ('vmCustomPlugin'))
    require(
    JPATH_VM_PLUGINS DS 'vmcustomplugin.php');
    JPluginHelper::importPlugin ('vmcustom');
    $dispatcher JDispatcher::getInstance ();
    $dispatcher->trigger ($trigger, array($product$row, &$html));
     
    }
    else {
    //vmdebug('customFieldDisplay $productCustom by self::getProductCustomField $variant: '.$variant.' $selected: '.$selected,$productCustom);
    $value '';
    if ((
    $productCustom->field_type == "G")) {
     
    $child self::getChild ($productCustom->custom_value);
    //$html .= $productCustom->custom_title.' '.$child->product_name;
    $value $child->product_name;
    }
    elseif ((
    $productCustom->field_type == "M")) {
    //$html .= $productCustom->custom_title.' '.self::displayCustomMedia($productCustom->custom_value);
    $value self::displayCustomMedia ($productCustom->custom_value);
    }
    elseif ((
    $productCustom->field_type == "S")) {
    //q$html .= $productCustom->custom_title.' '.JText::_($productCustom->custom_value);
    $value $productCustom->custom_value;
    }
    else {
    //$html .= $productCustom->custom_title.' '.$productCustom->custom_value;
    //vmdebug('customFieldDisplay',$productCustom);
    $value $productCustom->custom_value;
    }
    $html .= ShopFunctionsF::translateTwoLangKeys ($productCustom->custom_title$value);
    }
    $html .= '</span><br />';
    }
    else {
    // falldown method if customfield are deleted
    foreach ((array)$selected as $key => $value) {
    $html .= '<br/ >Couldnt find customfield' . ($key '<span>' $key ' </span>' '') . $value;
    }
    vmdebug ('CustomsFieldOrderDisplay, $item->productCustom empty? ' $variant);
    vmdebug ('customFieldDisplay, $productCustom is EMPTY ');
    }
     
    }
    $row++;
    }
     
    //vmdebug ('customFieldDisplay html begin: ' . $html . ' end');
    return $html '</div>';
    }
     
    /**
    * TODO This is html and view stuff and MUST NOT be in the model, notice by Max
    * render custom fields display cart module FE
    */
    public function CustomsFieldCartModDisplay ($priceKey$product) {
     
    if (empty(
    $calculator)) {
    if (!
    class_exists ('calculationHelper'))
    require(
    JPATH_VM_ADMINISTRATOR DS 'helpers' DS 'calculationh.php');
    $calculator calculationHelper::getInstance ();
    }
     
    $variantmods $calculator->parseModifier ($priceKey);
     
    return 
    self::customFieldDisplay ($product$variantmods'<div class="vm-customfield-mod">''plgVmOnViewCartModule');
     
    }
     
    /**
    *  TODO This is html and view stuff and MUST NOT be in the model, notice by Max
    * render custom fields display cart FE
    */
    public function CustomsFieldCartDisplay ($priceKey$product) {
     
    if (empty(
    $calculator)) {
    if (!
    class_exists ('calculationHelper'))
    require(
    JPATH_VM_ADMINISTRATOR DS 'helpers' DS 'calculationh.php');
    $calculator calculationHelper::getInstance ();
    }
     
    vmdebug('CustomsFieldCartDisplay ',$priceKey);
    $variantmods $calculator->parseModifier ($priceKey);
     
    return 
    self::customFieldDisplay ($product$variantmods'<div class="vm-customfield-cart">''plgVmOnViewCart');
     
    }
     
    /*
      * render custom fields display order BE/FE
     */
    public function CustomsFieldOrderDisplay ($item$view 'FE'$absUrl FALSE) {
     
    $row 0;
    //$item=(array)$item;
    if (!empty($item->product_attribute)) {
    $item->param json_decode ($item->product_attributeTRUE);
    //$html = '<div class="vm-customfield-cart">';
    if (!empty($item->param)) {
    return 
    self::customFieldDisplay ($item$item->param'<div class="vm-customfield-cart">''plgVmDisplayInOrder' $view);
     
    }
    else {
    vmdebug ('CustomsFieldOrderDisplay $item->param empty? ');
    }
    }
    else {
    //vmTrace('$item->product_attribut is empty');
    }
    return 
    FALSE;
    }
     
    /**
    *
    * custom fields for cart and cart module
    */
    public function getProductCustomField ($selected) {
     
    $db JFactory::getDBO ();
    $query 'SELECT C.`virtuemart_custom_id` , `custom_element` , `custom_parent_id` , `admin_only` , `custom_title` , `custom_tip` ,
    C.`custom_value` AS value, `custom_field_desc` , `field_type` , `is_list` , `is_cart_attribute` , `is_hidden` , C.`published` ,
    field.`virtuemart_customfield_id` , field.`custom_value`,field.`custom_param`,field.`custom_price`
    FROM `#__virtuemart_customs` AS C
    LEFT JOIN `#__virtuemart_product_customfields` AS field ON C.`virtuemart_custom_id` = field.`virtuemart_custom_id`
    WHERE `virtuemart_customfield_id` ="' 
    . (int)$selected '"';
    //if($product_parent_id!=0){
    //$query .= ' AND (`virtuemart_product_id` ="' . $product_id.'" XOR `virtuemart_product_id` ="' . $product_parent_id.'")';
    //} else {
    //$query .= ' AND (`virtuemart_product_id` ="' . $product_id.'"';
    //}
    $db->setQuery ($query);
    return 
    $db->loadObject ();
    }
     
    /*
      * add parameter to product definition
     */
    public function addParam ($product) {
     
    //vmdebug('addParam? ',$product->custom_param,$product->customPlugin);
    $custom_param = empty($product->custom_param) ? array() : json_decode ($product->custom_paramTRUE);
    $product_param = empty($product->customPlugin) ? array() : json_decode ($product->customPluginTRUE);
    $params = (array)$product_param + (array)$custom_param;
    foreach (
    $params as $key => $param) {
    $product->param[$key] = $param;
    }
    return 
    $product;
    }
     
    public function 
    getChild ($child) {
     
    $db JFactory::getDBO ();
    $db->setQuery ('SELECT  `product_sku`, `product_name` FROM `#__virtuemart_products_' VMLANG '` WHERE virtuemart_product_id=' $child);
    return 
    $db->loadObject ();
    }
     
    static public function 
    setEditCustomHidden ($customfield$i) {
     
    if (!isset(
    $customfield->virtuemart_customfield_id))
    $customfield->virtuemart_customfield_id '0';
    $html '
    <input type="hidden" value="' 
    $customfield->field_type '" name="field[' $i '][field_type]" />
    <input type="hidden" value="' 
    $customfield->virtuemart_custom_id '" name="field[' $i '][virtuemart_custom_id]" />
    <input type="hidden" value="' 
    $customfield->virtuemart_customfield_id '" name="field[' $i '][virtuemart_customfield_id]" />
    <input type="hidden" value="' 
    $customfield->admin_only '" checked="checked" name="field[' $i '][admin_only]" />';
    return 
    $html;
     
    }
    }
    // pure php no closing tag
     
  2. Skyfair

    Skyfair Постоялец

    Регистр.:
    27 мар 2013
    Сообщения:
    63
    Симпатии:
    14
    Так а в чем конкретно проблема? Если кнопка радио не устраивает, а нужен список - выбираешь поле "Атрибут корзины", пишешь название, далее снова выбираешь атрибут корзины, в "по умолчанию" через точку с запятой прописываешь значения, внизу указываешь список - "Да". И все.
     
    tkav нравится это.
  3. tempus

    tempus Создатель

    Заблокирован
    Регистр.:
    10 янв 2013
    Сообщения:
    25
    Симпатии:
    1
    Вам лучше не ставить тип поля - атрибут корзины.
    Лучше поставьте "общий дочерний вид" с привязкой к коду товара.

    Аргумент 1: Сейчас последовательний заказ сначала 100 л, а потом 50 л ни к чему не приводит. В корзине остается один и тот же товар, сумма не меняется.
    Аргумент 2: Вы решите проблему также с одновременным отображением одного и того же товара (с разным литражем) разными строчками в корзине, прикреплением к каждому из них особенного контента.
     
  4. Skyfair

    Skyfair Постоялец

    Регистр.:
    27 мар 2013
    Сообщения:
    63
    Симпатии:
    14
    Я сначала так же думал, а потом оказалось, что у меня цвета одежды, например, привязывались только к конкретному артикулу товара, и размеры также. И каждый раз надо было вручную все прописывать.
    И у него получится, что его 50 л и 100 л будут принадлежать только конкретному бойлеру, а при создании нового товара ему также придется добавлять в настраиваемых полях 50 л и 100 л.
     
  5. windows8

    windows8 Создатель

    Регистр.:
    12 июл 2012
    Сообщения:
    22
    Симпатии:
    0
    Большое спасибо, нашел свою глупую ошибку, у меня тип поля был строка.
    А как с выводом дочерних товаров, не работает вывод?
     
  6. tempus

    tempus Создатель

    Заблокирован
    Регистр.:
    10 янв 2013
    Сообщения:
    25
    Симпатии:
    1
    Если я правильно понял ваш вопрос, то как раз с выводом дочерних товаров новый VM работает намного лучше:
    1. Все товары (дочерние и родительские) получают глобальный код товара
    2. Дочерние товары выводятся с карточки родительского товара. Листая страницы сайта или через поиск они не выводятся.
     
Статус темы:
Закрыта.