Новости Joomla

Вышел Phoca Cart v.5.0

Вышел Phoca Cart v.5.0

Вышел Phoca Cart v.5.0.0 - компонент интернет-магазина для JoomlaХотите ли вы запустить большой интернет-магазин, небольшой интернет-магазин или просто онлайн-каталог, Phoca Cart справится с любой ситуацией. Он прост в настройке и использовании, что позволяет вам быстро и без усилий создать свой интернет-магазин на вашей системе Joomla. Phoca Cart 5 — это расширение Joomla 5, которое не будет корректно работать на Joomla 4. Расширения Phoca версии 5 обычно работают на Joomla 4, но Phoca Cart является исключением, поскольку оно использует новые современные функции Joomla 5, поэтому оно работает только на Joomla 5.Компонент развивается усилиями чешского Joomla-разработчика Яна Павелки (@phocacz).Среди разработчиков экосистемы расширений для Phoca Cart есть и некоторые отечественные, предлагающие аддоны способов оплаты для Phoca Cart.Страница расширенияСкачатьРасширения для Phoca Cart#расширения

Joomla 4 Rest API: создаем свои JSON-эндпоинты с нуляПо умолчанию Joomla отправляет ответы в...

Joomla 4 Rest API: создаем свои JSON-эндпоинты с нуляПо умолчанию Joomla отправляет ответы в формате JSON API, если запрос содержит
Accept: application/json или специальный заголовок JSON API. Хотя ядро Joomla не поддерживает другие типы контента, система позволяет разработчикам добавлять дополнительные форматы для ответов.👩‍💻 Цели материала:- Получить JSON ответ от API Joomla;- Создать необходимый плагин группы webservices и API-часть компонента;- Использовать параметры модуля для моделирования данных, которые мы отправим в ответе API.👩‍💻 Что не является целью?​Обучение созданию расширений. Данное руководство предполагает, что вы уже умеете создавать расширения для Joomla. Для работы API потребуются плагин и компонент, но компонент может быть минимальным — без модели (Model), с простой административной частью.Эта статья - перевод на русский язык раздела официальной документации Joomla для разработчиков Joomla! Programmers Documentation for Joomla 5.2. Статья пригодится разработчиком, работающим с реактивными frontend- фреймворками. Перевод выполнил участник нашего сообщества Виталий Некрасов (
@vitalik_a).- Читать статью на Хабре- Оригинал в документацииПодпишись на @joomlafeed#webdev #разработка #joomla #api #restapi

0 Пользователей и 1 Гость просматривают эту тему.
  • 28 Ответов
  • 16299 Просмотров
*

Gremlin

  • Захожу иногда
  • 293
  • 11 / 0
Поделюсь своим опытом работы с типами. За основу взят материал с pagex.ru и немного доработан для VM 1.1.15.
Итак собственно вывод типов и их значений организуется в /components/com_virtuemart/themes/default/templates/common/product_type.tpl.php (для дефолтной схемы магазина). Не знаю почему, но у меня там была ошибка - не выводились заданные единицы измерения. Ошибка была тут:
Код
if ( !empty($product_type_params["parameter_unit"] ) ) {
echo " ".$product_type_params["parameter_unit"];
это ориентировочно 60-я строка. Было вместо parameter_unit забито просто unit :(

Теперь как быть с типом, значение которого вы не задали? Правильно -  будет выведено просто название типа без значения - некрасиво. Значит делаем так, что бы типы без значений не выводились:
После
Код
foreach( $product_types as $product_type ) { // Loop through all recent products
foreach( $product_type as $attr => $val ) {
    //echo $attr." - ".$val."<br />";
        $this->set( $attr, $val );
       
    }
вставляем:
Код
if ( !empty( $product_type["parameters"] ) ) {
$countParams = 0;
foreach( $product_type["parameters"] as $product_type_params ) {
if ( !empty($product_type_params["parameter_value"])) {
$countParams ++;
}
}
if ( $countParams > 0 ) {

ну и в конце файла не забываем добавить закрывающую фигурную скобку ;).

Вставка вывода из шаблона product_type.tpl.php осуществляется такой вот строчкой
Код
<td colspan="3"><?php echo $product_type ?></td>
из файла /components/com_virtuemart/themes/default/templates/product_details/flypage.tpl.php.

Ну вроде все дополнения. Сейчас делаю вывод полного описания товаров, типов и т.д. в разных вкладках... Может кто уже научился выводить список типов в вкладки? Я так понимаю придется править flypage.tpl.php?
*

elscept

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Сделал все как описано. Только в конце файла нужно ставить две скобки (в описанном коде открыто 4, а закрыто только 2). Не работает. Вернее ничего не изменилось. Может еще что-то нужно подправить?
« Последнее редактирование: 29.07.2011, 01:01:11 от elscept »
*

Gremlin

  • Захожу иногда
  • 293
  • 11 / 0
Сделал все как описано. не работает. Выдает якобы ошибку в последней строчке кода  :'(
Ну предъявите материал для осмотра ;). Ссылка на сайт? Правленые файлы...
*

elscept

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Ну предъявите материал для осмотра ;). Ссылка на сайт? Правленые файлы...
http://lampa.mysite.poltava.ua

Вод код файла product_type.tpl после правки
Код
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
/**
* @version $Id: product_type.tpl.php 2286 2011-04-30 11:25:00Z zanardi $
* @package VirtueMart
* @subpackage themes
* @copyright Copyright (C) 2006-2011 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.
* See /administrator/components/com_virtuemart/COPYRIGHT.php for copyright notices and details.
*
* http://virtuemart.net
*/
?>
<?php if( empty($product_types)) return;
/**
* Available indexes:
*
* $product_type_params["parameter_label"] => The label for each product type parameter
* $product_type_params["parameter_description"] => The description of each product type parameter
* $product_type_params["tooltip"] => Same as above but wrapped in a tooltip
* $product_type_params["parameter_value"] => The actual value of the parameter for this product
* $product_type_params["parameter_unit"] => The unit of the parameter
* $product_type["product_type_name"] => The name of the product type
*
*/
?>
<!-- Tables of product_types -->

<?php
foreach( $product_types as $product_type ) { // Loop through all recent products
foreach( $product_type as $attr => $val ) {
    //echo $attr." - ".$val."<br />";
        $this->set( $attr, $val );
       
    }
   
if ( !empty( $product_type["parameters"] ) ) {
$countParams = 0;
foreach( $product_type["parameters"] as $product_type_params ) {
if ( !empty($product_type_params["parameter_value"])) {
$countParams ++;
}
}
if ( $countParams > 0 ) {

    ?><br /><table width="100%" cellspacing="0" cellpadding="0" border="0">
    <tr><td colspan="2"><strong><?php
    echo $VM_LANG->_('PHPSHOP_PRODUCT_TYPE_PARAMETERS_IN_CATEGORY');
    ?></strong></td></tr><?php
    $i = 0;
if ( !empty( $product_type["parameters"] ) ) {
foreach( $product_type["parameters"] as $product_type_params ) {
    foreach( $product_type_params as $attr => $val ) {
    $this->set( $attr, $val );
    }
if ( $i++ % 2 ) {
    $bgcolor = 'row0';
}
else {
    $bgcolor = 'row1';
}
if ( $i > $product_type["product_type_count_params"] ) {
break;
}

?><tr class="<?php echo $bgcolor;?>" height="18">
<td width="140px"><?php echo $product_type_params["parameter_label"];

if ( !empty($product_type_params["tooltip"] ) ) { ?>
    &nbsp;<?php echo $product_type_params["tooltip"];
}
?>
</td><td><?php echo $product_type_params["parameter_value"];

if ( !empty($product_type_params["parameter_unit"] ) ) {
echo " ".$product_type_params["parameter_unit"];
} ?>
</td></tr>
<?php
}
}
?>
    </table><?php
}}}
?>


И еще один очень важный вопрос. Не подскажете как вывести информацию о типе товара в модуле? Просто <?php echo $product_type ?> он не подхватывает.
« Последнее редактирование: 29.07.2011, 01:09:21 от elscept »
*

Gremlin

  • Захожу иногда
  • 293
  • 11 / 0
Ну на сайте присутствует вывод параметров. Или это сделано как подробное описание товара? Ошибок не выкидывает...
*

elscept

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Ошибок нет. Но и результата тоже. Я в php, мягко говоря, не силен. Так что мне эта задача не по зубам  :dry:
*

Gremlin

  • Захожу иногда
  • 293
  • 11 / 0
Моя доработка только несколько улучшает встроенный механизм. Вы внимательно прочитали материалы топикстартера? Там все расписано как работать с типами товаров...
*

elscept

  • Осваиваюсь на форуме
  • 36
  • 0 / 0
Прочитал всю ветку одним махом. Аж голова опухла. Перечитаю еще раз... может я пропустил решение.
*

aleckcey

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
сделал все как описано http://pagex.ru/blog/nastroyka-virtuemart-svoystva.html добавил тип товара и поля к ниму, присвоил тип товара-товару, после чего в админке у товара появилась еще одна закладка с типом товара который я прописывал(там в полях написал абракадабру), а на сайте в описании товара ничего не изменилось.
ворос как вывести типы товара?
Подскажите в какую сторону копать J1.5.20 VM 1.1.9
*

aleckcey

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
в файле flypage.tpl.php(/components/com_virtuemart/themes/default/templates/product_details) уже есть такой код.
правда там без ";" но я пробовал добавить и ни чего не изменилось доп поля с описанием не появились.
Все что в файле.
?php
// this template must have quirky HTML, because HTML2PDF doesn't fully understand
// CSS and XHTML
if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); ?>

<br><br>
<h1><?php echo $product_name ?></h1>
<br><br>

<table width=100%>
<tr><td width=50%><br><?php echo $product_price ?> </td>
<td width=50%><?php echo urldecode( $product_image )?>&nbsp;</td>
</tr>
</table>



<?php echo $product_description ?>

<?php echo $product_type ?>
<table width=100%>
<tr><td><?php echo $vendor_link ?></td></tr>
</table>

<table>
<tr><td>
<?php echo $product_reviews ?>
</td></tr>
</table>
« Последнее редактирование: 26.08.2011, 19:08:41 от aleckcey »
*

Gremlin

  • Захожу иногда
  • 293
  • 11 / 0
А точно используется шаблон flypage? Может вы другой шаблон для товара используете?
*

aleckcey

  • Осваиваюсь на форуме
  • 13
  • 0 / 0
Благодарен проблема была именно в этом стоял шаблон flypage-ask.
Так и думал что решение простое.
А что вывод доп полей возможен только в flypage или что надо менять чтоб в других шаблонах вывести
*

Gremlin

  • Захожу иногда
  • 293
  • 11 / 0
Вывод возможен в любом шаблоне, главное, что бы там присутствовал код:
Код
<?php echo $product_type ?>
*

Amsterdam1980

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
сделал все как говорил ТС в первой ссылке, захотел новый тип - технические характеристики (вес, масса, и т д), появился новый пункт при редактировании товара, но когдя заполняешь строки и нажимаешь - сохранить - то результаты не сохраняются. Что делать - непонятно.
Я так поня что нужно вставить
<?php echo $product_type; ?>
Простите за ламерский вопрос - а куда его нужно вставить?
*

Gremlin

  • Захожу иногда
  • 293
  • 11 / 0
Ну вообще прямо на этой странице как раз обсуждался вопрос куда вставлять product_type. Это вывод списка атрибутов товара, вставляете в шаблоне flypage в место, где вы хотите видеть список атрибутов.
*

Amsterdam1980

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
в файле flypage.tpl.php(/components/com_virtuemart/themes/default/templates/product_details)
я правильно понял?
*

Gremlin

  • Захожу иногда
  • 293
  • 11 / 0
Правильно, если именно этот шаблон вы используете (по умолчанию стоит именно он).
*

Amsterdam1980

  • Осваиваюсь на форуме
  • 16
  • 0 / 0
Что то я ламер  :( на двух сайтах своих пытался сделать - не получается, вроде сами поля высвечиваются под корзиной, а вот заполнить их не могу
 >:( Почему то тупо не сохраняются  данные и все тут...
http://bodysport.com.ua/tovary-casada/massazhnaya-podushka-maxiwell-1-maksivell1.html
*

Gremlin

  • Захожу иногда
  • 293
  • 11 / 0
Ну вы добавили типы товаров, например "Размеры" или там "Параметры подключения". Теперь вам нужно добавить параметры этого типа, например для "Размеры" можно задать: "Длина", "ширина" и т.д. и уже им присвоить значения. Идея понятна? Привожу экран (, где красной стрелкой показано куда тыкать для просмотра типов товаров, а синей показано где смотреть/задавать параметры этих типов.
Ну если опять не понятно, то милости прошу в личку ;)
*

switch

  • Захожу иногда
  • 128
  • 0 / 1
Стоит аналогичная задача, только чтоб не таблицей показывало, а отдельно под ценой!
Есть к примеру магазин строй материалов. Для каждого товара есть свои техн. данные. То есть на подобие размеров, но сгруппировать их не получится! Так как данные у 90% разные! Как поступить?
*

San_Sanich

  • Новичок
  • 7
  • 0 / 0
Ребят, помогите пожалуйста! Третий день сижу не могу разобраться! Не люблю задавать вопросы, просто сил уже нет!
Начнём по порядку... Пользуюсь не стандартным шаблоном для VirtueMart, файл product_type.tpl.php у меня отсутствует.
После поисков, узнал что за вывод типов товара в карточке у меня отвечает файл ps_product_type.php его код ниже:
Код
<?php
if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
/**
*
* @version $Id: ps_product_type.php 1288 2008-03-03 23:26:20Z thepisu $
* @package VirtueMart
* @subpackage classes
* @copyright Copyright (C) 2004-2007 soeren - 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.
* See /administrator/components/com_virtuemart/COPYRIGHT.php for copyright notices and details.
*
* http://virtuemart.net
*/


/**
 * Product Type Handling Class
 *
 */
class ps_product_type {

/**
* Validates the Input Parameters onBeforeProductTypeAdd
* @author Zdenek Dvorak
* @param array $d
* @return boolean
*/
function validate_add(&$d) {
global $VM_LANG;

if (empty($d["product_type_name"])) {
$GLOBALS['vmLogger']->err( $VM_LANG->_('VM_PRODUCT_TYPE_ERR_NAME') );
return False;
}
else {
return True;
}
}

/**
* Validates the Input Parameters onBeforeProductTypeDelete
* @author Zdenek Dvorak
* @param int $product_type_id
* @param array $d
* @return boolean
*/
function validate_delete( $product_type_id, &$d) {
global $VM_LANG;

$db = new ps_DB;

if (empty( $product_type_id)) {
$GLOBALS['vmLogger']->err( $VM_LANG->_('VM_PRODUCT_TYPE_DELETE_SELECT') );
return False;
}

return True;
}

/**
* Validates the Input Parameters onBeforeProductTypeUpdate
* @author Zdenek Dvorak
* @param array $d
* @return boolean
*/
function validate_update(&$d) {
global $VM_LANG;

if (!$d["product_type_name"]) {
$GLOBALS['vmLogger']->err( $VM_LANG->_('VM_PRODUCT_TYPE_ERR_NAME') );
return False;
}
else {
return True;
}
}

/**
* creates a new Product Type record
* @author Zdenek Dvorak
*
* @param array $d
* @return boolean
*/
function add(&$d) {
global $VM_LANG;

$db = new ps_DB;

if ($this->validate_add($d)) {

// find product_type_id
$q  = "SELECT MAX(product_type_id) AS product_type_id FROM #__{vm}_product_type";
$db->query( $q );
$db->next_record();
$product_type_id = intval($db->f("product_type_id")) + 1;

// Let's find out the last Product Type
$q = "SELECT MAX(product_type_list_order) AS list_order FROM #__{vm}_product_type";
$db->query( $q );
$db->next_record();
$list_order = intval($db->f("list_order"))+1;
if ($d["product_type_publish"] != "Y") {
$d["product_type_publish"] = "N";
}

$fields = array( 'product_type_id' => $product_type_id,
'product_type_name' => vmGet($d, 'product_type_name' ),
'product_type_description' => vmGet($d, 'product_type_description'),
'product_type_publish' => vmGet($d, 'product_type_publish'),
'product_type_browsepage' => vmGet($d, 'product_type_browsepage'),
'product_type_flypage' => vmGet($d, 'product_type_flypage'),
'product_type_list_order' => $list_order
);
$db->buildQuery('INSERT', '#__{vm}_product_type', $fields );
$db->query();

$_REQUEST['product_type_id'] = $product_type_id;

// Make new table product_type_<id>
$q = "CREATE TABLE `#__{vm}_product_type_";
$q .= $product_type_id . "` (";
$q .= "`product_id` int(11) NOT NULL,";
$q .= "PRIMARY KEY (`product_id`)";
$q .= ") TYPE=MyISAM;";
$db->setQuery($q);

if( $db->query() === false ) {
$GLOBALS['vmLogger']->err( $VM_LANG->_('VM_PRODUCT_TYPE_ADD_FAILED') );
return false;
} else {
$GLOBALS['vmLogger']->info( $VM_LANG->_('VM_PRODUCT_TYPE_ADDED') );
return true;
}

}
else {
return False;
}

}

/**
* updates Product Type information
* @author Zdenek Dvorak
* @param array $d
* @return boolean
*/
function update(&$d) {
$db = new ps_DB;

if ($this->validate_update($d)) {
if (empty($d["product_type_publish"])) {
$d["product_type_publish"] = "N";
}
$fields = array(
'product_type_name' => vmGet($d, 'product_type_name' ),
'product_type_description' => vmGet($d, 'product_type_description'),
'product_type_publish' => vmGet($d, 'product_type_publish'),
'product_type_browsepage' => vmGet($d, 'product_type_browsepage'),
'product_type_flypage' => vmGet($d, 'product_type_flypage'),
'product_type_list_order' => vmRequest::getInt('list_order')
);
$db->buildQuery('UPDATE', '#__{vm}_product_type', $fields, 'WHERE product_type_id=' .(int)$d["product_type_id"] );
$db->query();

// Re-Order the Product Type table IF the list_order has been changed
if( intval($d['list_order'])!= intval($d['currentpos'])) {
$dbu = new ps_DB;

/* Moved UP in the list order */
if( intval($d['list_order']) < intval($d['currentpos']) ) {

$q  = "SELECT product_type_id FROM #__{vm}_product_type WHERE ";
$q .= "product_type_id <> '" . $d["product_type_id"] . "' ";
$q .= "AND product_type_list_order >= '" . intval($d["list_order"]). "'";
$db->query( $q );

while( $db->next_record() ) {
$dbu->query("UPDATE #__{vm}_product_type SET product_type_list_order=product_type_list_order+1 WHERE product_type_id='".$db->f("product_type_id")."'");
}
}
// Moved DOWN in the list order
else {

$q = "SELECT product_type_id FROM #__{vm}_product_type WHERE ";
$q .= "product_type_id <> '" . $d["product_type_id"] . "' ";
$q .= "AND product_type_list_order > '" . intval($d["currentpos"]). "'";
$q .= "AND product_type_list_order <= '" . intval($d["list_order"]). "'";
$db->query( $q );

while( $db->next_record() ) {
$dbu->query("UPDATE #__{vm}_product_type SET product_type_list_order=product_type_list_order-1 WHERE product_type_id='".$db->f("product_type_id")."'");
}

}
} // END Re-Ordering

return True;
}
else {
return False;
}
}

/**
* Controller for Deleting Records.
*/
function delete(&$d) {

$record_id = (int)$d["product_type_id"];
require_once( CLASSPATH.'ps_product_type_parameter.php');

if( is_array( $record_id)) {
foreach( $record_id as $record) {
if( !$this->delete_record( $record, $d ))
return false;
}
return true;
}
else {
return $this->delete_record( $record_id, $d );
}
}
/**
* Should delete a Product Type and drop table product_type_<id>
*
* @param int $record_id
* @param array $d
* @return boolean True on success
*/
function delete_record( $record_id, &$d ) {
global $db;

if (!$this->validate_delete( $record_id, $d)) {
return False;
}
// Delete all product parameters from this product type
$q = 'SELECT `parameter_name` FROM `#__{vm}_product_type_parameter` WHERE `product_type_id`='.$record_id;
$db->query($q);
while( $db->next_record() ) {
if( !isset($ps_product_type_parameter)) { $ps_product_type_parameter = new ps_product_type_parameter(); }
$arr['product_type_id'] = $record_id;
$arr['parameter_name'] = $db->f('parameter_name');
$ps_product_type_parameter->delete_parameter( $arr );
}

$q = "DELETE FROM #__{vm}_product_type WHERE product_type_id='$record_id'";
$db->setQuery($q);   $db->query();

$q  = "DELETE FROM #__{vm}_product_product_type_xref WHERE product_type_id='$record_id'";
$db->setQuery($q);   $db->query();

$q  = "DROP TABLE IF EXISTS `#__{vm}_product_type_".$record_id."`";
$db->setQuery($q);   $db->query();
return True;
}

/**
* Calculates and returns number of products assigned to this Product Type
*
* @param int $product_type_id
* @return int
*/
function product_count($product_type_id) {
$ps_vendor_id = $_SESSION["ps_vendor_id"];

$db = new ps_DB;

$count  = "SELECT count(*) as num_rows from #__{vm}_product,#__{vm}_product_product_type_xref WHERE ";
$q  = "#__{vm}_product.vendor_id = '$ps_vendor_id' ";
$q .= "AND #__{vm}_product_product_type_xref.product_type_id='$product_type_id' ";
$q .= "AND #__{vm}_product.product_id=#__{vm}_product_product_type_xref.product_id ";
$q .= "AND #__{vm}_product.product_parent_id='' ";
//$q .= "ORDER BY product_publish DESC,product_name ";
$count .= $q;
$db->query($count);
$db->next_record();
return $db->f("num_rows");
}

/**
* Calculates and returns number of parameters in given Product Type
*
* @param int $product_type_id
* @return int
*/
function parameter_count($product_type_id) {
$db = new ps_DB;

$count  = "SELECT count(*) as num_rows from #__{vm}_product_type_parameter WHERE ";
$q = "product_type_id='$product_type_id' ";
$count .= $q;
$db->query($count);
$db->next_record();
return $db->f("num_rows");
}

/**
* Returns the Product Type name.
*
* @param unknown_type $product_type_id
* @return unknown
*/
function get_name($product_type_id) {
$db = new ps_DB;

$q = "SELECT product_type_name FROM #__{vm}_product_type WHERE product_type_id='$product_type_id' ";

$db->query($q);
$db->next_record();

return $db->f("product_type_name");
}

/**
* Returns the Product Type Description
*
* @param int $product_type_id
* @return string
*/
function get_description($product_type_id) {
$db = new ps_DB;

$q = "SELECT product_type_description FROM #__{vm}_product_type ";
$q .= "WHERE product_type_id='$product_type_id' ";

$db->query($q);
$db->next_record();

return $db->f("product_type_description");
}

/**
* lists all Product Types
*
* @param int $product_type_id
* @param int $list_order
* @return string
*/
function list_order( $product_type_id='0', $list_order=0 ) {

$db = new ps_DB;
if (!$product_type_id) {
return $GLOBALS['VM_LANG']->_( 'CMN_NEW_ITEM_LAST' );
}
else {

$q  = "SELECT product_type_list_order,product_type_name FROM #__{vm}_product_type ";
if( $product_type_id ) {
$q .= 'WHERE product_type_id='.$product_type_id;
}
$q .= " ORDER BY product_type_list_order ASC";
$db->query( $q );

$array = array();
while( $db->next_record() ) {
$array[$db->f("product_type_list_order")] = $db->f("product_type_list_order").". ".$db->f("product_type_name");
}

return ps_html::selectList('list_order', $list_order, $array );
}
}

/**
* Changes the Product Type List Order
*
* @param array $d
*/
function reorder( &$d ) {
$cb = vmGet( $_POST, 'product_type_id', array(0) );

$db = new ps_DB;
switch( $d["task"] ) {
case "orderup":
$q = "SELECT product_type_list_order FROM #__{vm}_product_type ";
$q .= "WHERE product_type_id='".(int)$cb[0]."' ";
$db->query($q);
$db->next_record();
$currentpos = $db->f("product_type_list_order");
//$category_parent_id = $db->f("category_parent_id");

// Get the (former) predecessor and update it
$q  = "SELECT product_type_list_order,product_type_id FROM #__{vm}_product_type WHERE ";
$q .= "product_type_list_order<'". $currentpos . "' ";
$q .= "ORDER BY product_type_list_order DESC";
$db->query($q);
$db->next_record();
$pred = $db->f("product_type_id");
$pred_pos = $db->f("product_type_list_order");

// Update the Product Type and decrease the list_order
$q = "UPDATE #__{vm}_product_type ";
$q .= "SET product_type_list_order='".$pred_pos."' ";
$q .= "WHERE product_type_id='".(int)$cb[0]."'";
$db->query($q);

$q = "UPDATE #__{vm}_product_type ";
$q .= "SET product_type_list_order='".intval($pred_pos + 1)."' ";
$q .= "WHERE product_type_id='$pred'";
$db->query($q);

break;

case "orderdown":
$q = "SELECT product_type_list_order FROM #__{vm}_product_type ";
$q .= "WHERE product_type_id='".(int)$cb[0]."' ";
$db->query($q);
$db->next_record();
$currentpos = $db->f("product_type_list_order");

// Get the (former) successor and update it
$q  = "SELECT product_type_list_order,product_type_id FROM #__{vm}_product_type WHERE ";
$q .= "product_type_list_order>'". $currentpos . "' ";
$q .= "ORDER BY product_type_list_order";
$db->query($q);
$db->next_record();
$succ = $db->f("product_type_id");
$succ_pos = $db->f("product_type_list_order");

$q = "UPDATE #__{vm}_product_type ";
$q .= "SET product_type_list_order='".$succ_pos."' ";
$q .= "WHERE product_type_id='".(int)$cb[0]."' ";
$db->query($q);

$q = "UPDATE #__{vm}_product_type ";
$q .= "SET product_type_list_order='".intval($succ_pos - 1)."' ";
$q .= "WHERE product_type_id='$succ'";
$db->query($q);

break;
}

}

/**
* Returns the parameter list for form (hiden items)
* @author Zdenek Dvorak
*
* @param int $product_type_id
* @return string
*/
function get_parameter_form($product_type_id='0') {
$db = new ps_DB;
$q  = "SELECT * FROM #__{vm}_product_type_parameter ";
$q .= "WHERE product_type_id='$product_type_id'";
$db->query($q);

$html = "";
while ($db->next_record()) {
if ($db->f("parameter_type")!="B") { // not Break line
$item_name = "product_type_$product_type_id"."_".$db->f("parameter_name");
if ($db->f("parameter_multiselect")=="Y" && $db->f("parameter_values")) { // Multiple section List of values
$get_item_value = vmGet($_REQUEST, $item_name, array());
foreach($get_item_value as $value) {
$html .= "<input type=\"hidden\" id=\"$value\" name=\"".$item_name."[]\"  value=\"".$value."\" />\n";
}
$html .= "<input type=\"hidden\" name=\"".$item_name."_comp\"  value=\"";
$html .= vmGet($_REQUEST, $item_name."_comp", "")."\" />\n";
}
else {
$html .= "<input type=\"hidden\" name=\"".$item_name."\"  value=\"";
$html .= vmGet($_REQUEST, $item_name, "");
$html .= "\" />\n";
// comparison
$html .= "<input type=\"hidden\" name=\"".$item_name."_comp\"  value=\"";
$html .= vmGet($_REQUEST, $item_name."_comp", "");
$html .= "\" />\n";
}
}
}
// item for price search
$html .= "<input type=\"hidden\" name=\"price\" value=\"".vmGet($_REQUEST,"price", "")."\" />\n";
$html .= "<input type=\"hidden\" name=\"price_comp\" value=\"".vmGet($_REQUEST,"price_comp", "")."\" />\n";

return $html;
}

/**
* Returns HTML code for show parameters in select ORDER BY
* @author Zdenek Dvorak
*
* @param int $product_type_id
* @param string $orderby
*/
function get_parameter_order_list($product_type_id,$orderby="") {
$db = new ps_DB;
$q  = "SELECT * FROM #__{vm}_product_type_parameter ";
$q .= "WHERE product_type_id=$product_type_id ";
$q .= "AND parameter_type<>'B' "; // NO Break Line
$q .= "ORDER BY parameter_list_order";
$db->query($q);
while ($db->next_record()) {
$value = "pshop_product_type_".$product_type_id.".".$db->f("parameter_name");
echo "<option value=\"$value\" ";
if ($orderby == $value) echo "selected ";
echo ">".$db->f("parameter_label")."</option>\n";
}
}

/**
* Returns true if the product is in a Product Type
* @author Zdenek Dvorak
*
* @param int $product_id
* @return boolean
*/
function product_in_product_type($product_id) {
$db = new ps_DB;
$q = "SELECT * FROM #__{vm}_product_product_type_xref WHERE product_id='$product_id'";
$db->query($q);
return $db->num_rows() > 0;
}

/**
* Returns HTML code for show parameters
* @author Zdenek Dvorak
*
* @param int $product_id
* @return string
*/
function list_product_type($product_id) {
global $VM_LANG;

if (!$this->product_in_product_type($product_id)) {
return "";
}

$dbag = new ps_DB;
$dba = new ps_DB;
$dbp = new ps_DB;
$html = "";

$q  = "SELECT * FROM #__{vm}_product_product_type_xref ";
$q .= "LEFT JOIN #__{vm}_product_type USING (product_type_id) ";
$q .= "WHERE product_id='$product_id' AND product_type_publish='Y' ";
$q .= "ORDER BY product_type_list_order";
$dbag->query( $q );
$q  = "SELECT * FROM #__{vm}_product_type_parameter ";
$q .= "WHERE product_type_id=";
while ($dbag->next_record()) {//all product types
if ($dbag->f("product_type_flypage")) {
$flypage_file = PAGEPATH."templates/".$dbag->f("product_type_flypage").".php";
if (file_exists($flypage_file)) {
$html .= include($flypage_file);
continue;
}
}

$html .= "<br />\n<table class=\"rounded\" width=\"510\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n";
       
// SELECT parameter value of product
$q2  = "SELECT * FROM #__{vm}_product_type_".$dbag->f("product_type_id");
$q2 .= " WHERE product_id='$product_id'";
$dbp->query($q2);
// SELECT parameter of Product Type
$dba->query($q.$dbag->f("product_type_id")." ORDER BY parameter_list_order");
$i=0;
while ($dba->next_record()) {
if ($i++ % 2) {
$bgcolor='row1';
} else {
$bgcolor='row0';
}

$html .= "<tr class=\"$bgcolor\" height=\"25\">\n";
$html .= "<td width=\"40%\"  align=\"right\"><strong>".$dba->f("parameter_label"). ": ";
$parameter_description = $dba->f("parameter_description");
if (!empty($parameter_description)) {
$html .= "&nbsp;";
$html .= vmToolTip($parameter_description, $VM_LANG->_('PHPSHOP_PRODUCT_TYPE_PARAMETER_FORM_DESCRIPTION'));
}
$html .= "</td>\n<td style=\"padding:10px\">";
$html .= $dbp->f($dba->f("parameter_name"))." ".$dba->f("parameter_unit")."</strong></td></tr>\n";
}
$html .= "</table>\n";
}
return $html;
}
}

?>
Проблема состоит в следующем:
Допустим у меня есть тип "Телевизоры", параметры типа: разрешение, диагональ, наличие LED Подсветки и.т.п. Для некоторых телевизоров мне необходимо отображать все эти параметры. Для других моделей телевизоров, лишь часть этих параметров.
Помогите пожалуйста, в долгу не останусь!
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
Никаким боком этот класс не выводит параметры в карточке. Это стандартный класс типов, служит для создания, удаления и т.д. типов.
Это не шаблон вывода типов.
*

San_Sanich

  • Новичок
  • 7
  • 0 / 0
Может подскажете что нужно делать? Я отблагодарю!
*

San_Sanich

  • Новичок
  • 7
  • 0 / 0
У меня VirtueMart 1.1.3 stable
*

flyingspook

  • Moderator
  • 3590
  • 247 / 9
Код
// SELECT parameter of Product Type
$dba->query($q.$dbag->f("product_type_id")." ORDER BY parameter_list_order");
$i=0;
while ($dba->next_record()) {
if ($i++ % 2) {
$bgcolor='row1';
} else {
$bgcolor='row0';
}

$html .= "<tr class=\"$bgcolor\" height=\"25\">\n";
$html .= "<td width=\"40%\"  align=\"right\"><strong>".$dba->f("parameter_label"). ": ";
$parameter_description = $dba->f("parameter_description");
if (!empty($parameter_description)) {
$html .= "&nbsp;";
$html .= vmToolTip($parameter_description, $VM_LANG->_('PHPSHOP_PRODUCT_TYPE_PARAMETER_FORM_DESCRIPTION'));
}
$html .= "</td>\n<td style=\"padding:10px\">";
$html .= $dbp->f($dba->f("parameter_name"))." ".$dba->f("parameter_unit")."</strong></td></tr>\n";
}
$html .= "</table>\n";
}
return $html;

не понимаю конечно что у вас и как но похоже это и есть ваш product_type.tpl.php в общем коде
только не пойму зачем так сделано
на счет помощи не видя объекта и не разобравшись со всем тем что у вас наворочено/и для чего вряд ли кто поможет

почитай может что и сообразишь
http://joomlaforum.ru/index.php/topic,155343.0.html
*

San_Sanich

  • Новичок
  • 7
  • 0 / 0
Ребят, вопрос до сих пор открыт :( Пытаюсь вставить нечто следующие:
Код
if($html["parameter_name"] != "null") {
                       а вот что сюда задать?}
Насколько я понял, как приведено в коде выше (в коде ps_product_type.php), каждый параметр выводится поочерёдно. Как сделать чтобы функция пропустила загруженный из базы данных параметр со значением "null" (устанавливается автоматически, если не задавать другие) и запустить вывод следующего параметра?
Блин, помогите, денег заплачу! Голова уже квадратная!
*

grub

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Кто в курсе объясните как в карточке товара скрыть отдельные параметры из типа товара?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

VirtueMart 1.1.4 и https дополнительные фото товаров

Автор Sergey1984

Ответов: 0
Просмотров: 2571
Последний ответ 23.10.2018, 19:58:44
от Sergey1984
JComments + VirtueMart (решение проблемы рейтинга товаров)

Автор Oleksii

Ответов: 9
Просмотров: 4877
Последний ответ 13.09.2018, 23:26:17
от bgg87
VMExport YML - Компонент для управления экспортом товаров из VirtueMart 1.1.x на Яндекс.Маркет

Автор jeka5555

Ответов: 5
Просмотров: 3698
Последний ответ 02.07.2017, 21:25:46
от vipiusss
VirtueMart каталог не показывает все категории товаров

Автор vasyun

Ответов: 1
Просмотров: 1131
Последний ответ 14.06.2017, 20:30:51
от vasyun
Проблемы с поиском товаров в VirtueMart

Автор fashion_ff

Ответов: 10
Просмотров: 5353
Последний ответ 29.05.2017, 12:54:06
от OutLaw1