Новости Joomla

Как тестировать Joomla PHP-разработчику? Компонент Patch tester.

👩‍💻 Как тестировать Joomla PHP-разработчику? Компонент Patch tester.Joomla - open source PHP-фреймворк с готовой админкой. Его основная разработка ведётся на GitHub. Для того, чтобы международному сообществу разработчиков было удобнее тестировать Pull Requests был создан компонент Patch Tester, который позволяет "накатить" на текущую установку Joomla именно те изменения, которые необходимо протестировать. На стороне инфраструктуры Joomla для каждого PR собираются готовые пакеты, в которых находится ядро + предложенные изменения. В каждом PR обычно находятся инструкции по тестированию: куда зайти, что нажать, ожидаемый результат. Тестировщики могут предположить дополнительные сценарии, исходя из своего опыта и найти баги, о которых сообщить разработчику. Или не найти, и тогда улучшение или исправление ошибки быстрее войдёт в ядро Joomla. Напомню, что для того, чтобы PR вошёл в ядро Joomla нужны минимум 2 положительных теста от 2 участников сообщества, кроме автора. Видео на YouTubeВидео на VK ВидеоВидео на RuTubeКомпонент на GitHub https://github.com/joomla-extensions/patchtester@joomlafeed#joomla #php #webdev #community

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

Sulpher

  • Живу я здесь
  • 2136
  • 402 / 16
  • Шаблоны и расширения Joomla
Для реализации сорировки товара по производителям, необходимо внести ряд модификаций.

1. Открываем файл administrator/components/com_virtuemart/html/shop.browse.php:

найти строку 121:
Код: php
		$db->query( "SELECT manufacturer_id, mf_name, mf_desc FROM #__{vm}_manufacturer WHERE manufacturer_id='$manufacturer_id'");
и заменить на:

Код: php
		$db->query( "SELECT manufacturer_id, mf_name FROM #__{vm}_manufacturer WHERE manufacturer_id='$manufacturer_id'");

Далее, в этом же файле найти кусок кода: (172 строка)

Код: php
	if ( $num_rows > 1 && @$_REQUEST['output'] != "pdf") {
if ( $num_rows > 5 ) { // simplified logic
$search_string = $mm_action_url."index.php?option=com_virtuemart&Itemid=$Itemid&category_id=$category_id&page=$modulename.browse";
$search_string .= empty($manufacturer_id)? '' : "&manufacturer_id=$manufacturer_id";
$search_string .= empty($keyword)? '' : '&keyword='.urlencode( $keyword );
if (!empty($keyword1)) {
$search_string.="&keyword1=".urlencode($keyword1);
$search_string.="&search_category=".urlencode($search_category);
$search_string.="&search_limiter=$search_limiter";
if (!empty($keyword2)) {
$search_string.="&keyword2=".urlencode($keyword2);
$search_string.="&search_op=".urlencode($search_op);
}
}
и заменить на:

Код: php
	if ( $num_rows > 1 && @$_REQUEST['output'] != "pdf") {
if ( $num_rows > $limit  || $num_rows > 5 ) {
$search_string = $mm_action_url."index.php?option=com_virtuemart&page=$modulename.browse&category_id=$category_id&keyword=".urlencode( $keyword )."&manufacturer_id=$manufacturer_id&Itemid=$Itemid";
$search_string .= !empty($orderby)? "&orderby=".urlencode($orderby) : "";
if (!empty($keyword1)) {
$search_string.="&keyword1=".urlencode($keyword1);
$search_string.="&search_category=$search_category";
$search_string.="&search_limiter=$search_limiter";
if (!empty($keyword2)) {
$search_string.="&keyword2=".urlencode($keyword2);
$search_string.="&search_op=$search_op";
}
}

Строку 187:
Код: php
					if (substr($key, 0,13) == "product_type_"){

заменить на:
Код: php
			if (substr($key, 0,13) == "product_type_" || substr($key, 0,5) == "price"){

Далее, после строки 232:
Код: php
		$tpl->set( 'orderby_form', $orderby_form );


Добавить такой код:
Код: php
		//CHANGES FOR MANUFACTURER FILTER
$orderby_form = $tpl->fetch( 'browse/includes/browse_filterbymf.tpl.php' );
$tpl->set( 'filterby_mf', $orderby_form );
//END CHANGES FOR MANUFACTURER FILTER

После строки 235:
Код: php
    	$tpl->set( 'orderby_form', '' );

Добавить вот это:
Код: php
	//CHANGES FOR MANUFACTURER FILTER
$tpl->set( 'filterby_mf', '' );
//END CHANGES FOR MANUFACTURER FILTER

2. Открываем файл administrator/components/com_virtuemart/html/shop_browse_queries.php:


Строки 22-25:
Код: php
// Descending or Ascending Order? possible values: [ASC|DESC]
$DescOrderBy = strtoupper($vm_mainframe->getUserStateFromRequest( "browse{$keyword}{$category_id}{$manufacturer_id}DescOrderBy", 'DescOrderBy', "ASC" ));
$DescOrderBy == 'ASC' ? 'ASC' : 'DESC';

заменить на:
Код: php
// Descending or Ascending Order? possible values: [ASC|DESC]
$DescOrderBy = $vmInputFilter->safeSQL( $vm_mainframe->getUserStateFromRequest( "browse{$keyword}{$category_id}{$manufacturer_id}DescOrderBy", 'DescOrderBy', "ASC" ) );

строки 63-67:
Код: php
// Filter Products by Category
if( $category_id ) {
if( !empty( $search_this_category ) && (!empty( $keyword ) || !empty( $manufacturer_id ) )) {
$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=".$category_id;
} elseif( empty( $keyword ) && empty( $manufacturer_id )) {

заменить на:

Код: php
// Filter Products by Category
if( $category_id ) {
if( !empty( $search_this_category ) && (!empty( $keyword ) || !empty( $manufacturer_id ) )) {
$where_clause[] = "#__{vm}_product_category_xref`.`category_id`=".$category_id;
//MODIFIED FOR FILTER MANUFACTURER
//} elseif( empty( $keyword ) && empty( $manufacturer_id )) {
} elseif( empty( $keyword )) {
//END MODIFIED FOR FILTER MANUFACTURER

После строки 299 дописать такой код:
Код: php
$count  = "SELECT $count_name FROM ($table_names) ";
и перед
Код: php
if( $perm->is_registered_customer($auth['user_id']) ) {	

Добавить:
Код: php
//DEBUG x FILTER MANUFACTURER
//echo '<br />'.'--------------------'.'<br />';
//echo 'list='.$list.'<br />';
//echo '<br />'.'--------------------'.'<br />';
//echo 'count='.$count.'<br />';
//$where_clause[] = "`#__{vm}_product_category_xref`.`category_id`=16 ";

Строку 309:
Код: php
$where_clause[] = "`product_parent_id`=0 ";

заменить на:

Код: php
$where_clause[] = "((`product_parent_id`='0') OR (`product_parent_id`='')) ";

После строки 321:
Код: php
$q .= "\n ORDER BY $orderbyField $DescOrderBy";

Вставить:
Код: php
//DEBUG x FILTER MANUFACTURER
//echo '<br />'.'--------------------'.'<br />';
//echo 'q='.$q.'<br />';

3. Открываем components/com_virtuemart/themes/default/templates/browse/includes/browse_orderbyform.tpl:
после строк 18-19:
Код: php
        <input class="button" type="submit" value="'.$VM_LANG->_('PHPSHOP_SUBMIT').'" />');
}

добавляем:
Код: php
    //CHANGES FOR FILTER MANUFACTURER
    echo $this->fetch( 'browse/includes/browse_filterbymf.tpl.php');
    //END CHANGES FOR FILTER MANUFACTURER

Строку 25:
Код: php
    <input type="hidden" name="manufacturer_id" value="<?php echo $manufacturer_id ?>" />

Заменяем на строки:
Код: php
    <!--  CHANGES FOR FILTER MANUFACTURER
        <input type="hidden" name="manufacturer_id" value="<?php echo $manufacturer_id ?>" />
        -->
    <input type="hidden" name="limitstart" value="0" />

Находим строку 32:
Код: php
	echo '<input type="hidden" name="product_type_id" value="'.$product_type_id.'" />'; 
и закомментируем ее.

находим строки 36-55:
Код: php
if( $show_top_navigation ) {
?>
&nbsp;&nbsp;&nbsp;&nbsp;<?php echo $VM_LANG->_('PN_DISPLAY_NR')?>&nbsp;&nbsp;

<?php $pagenav->writeLimitBox(); ?>
<noscript><input type="submit" value="<?php echo $VM_LANG->_('PHPSHOP_SUBMIT')?>" /></noscript>

    <!-- PAGE NAVIGATION AT THE TOP -->
    <br/ >
    <div style="text-align:center;"><?php
     $pagenav->writePagesLinks( $search_string );
     echo '<br />';
     $pagenav->writePagesCounter();
      ?>
    </div>
    
<?php

}
?>

и заменяем на:
Код: php
//if( $show_top_navigation ) {
?>
<!-- <form action="<?php echo $mm_action_url."index.php" ?>" method="get" name="order">
&nbsp;&nbsp;&nbsp;&nbsp;<?php echo $VM_LANG->_('PN_DISPLAY_NR')?>&nbsp;&nbsp;

<?php $pagenav->writeLimitBox( $search_string ); ?>
<noscript><input type="submit" value="<?php echo $VM_LANG->_('PHPSHOP_SUBMIT')?>" /></noscript>
-->  
    <!-- PAGE NAVIGATION AT THE TOP -->
<!--    <br />
    <div style="text-align:center;"><?php
     $pagenav->writePagesLinks( $search_string );
     echo '<br />';
     $pagenav->writePagesCounter();
      ?>
    </div>
-->    
<?php

// }
?>

4. Создаём файл components/com_virtuemart/themes/default/templates/browse/includes/browse_filterbymf.tpl.php (файл приложен в аттаче)

Готово.

P.S. Это пока черновик, статью писал опираясь на сравнение хаков вот этого решения. Опробую на сайте вечером.

[вложение удалено Администратором]
*

morph

  • Давно я тут
  • 924
  • 105 / 0
 :o
скока много кода...что в конце концов получиться должно?
теория http://forum.virtuemart.ru/viewtopic.php?f=2&t=10 и готовое файло http://joomlaforum.ru/index.php/topic,54162.msg363639.html#msg363639 для сортировки  по производителям в категории все также как в хаке для 1.0.*....или я недогнал?

*

matiass

  • Осваиваюсь на форуме
  • 32
  • 0 / 0
Работает, не подскажешь как вывести не выпадающим меню, а ссылками всех брендов?  Или в выпадающем меню слово выбрать изменить на "Выбрать производителя"
« Последнее редактирование: 25.06.2009, 14:02:11 от matiass »
*

vitaliy.balatskiy

  • Захожу иногда
  • 92
  • 5 / 0

Я так понимаю это сортировка во фронтенде! А меня интересует, как бы добавить сортировку в админке VM , а то товаров много, и когда хочется отсортировать по производителях. такой облом настает! Помогите, люди добрые!
*

abbat_gro

  • Осваиваюсь на форуме
  • 12
  • 0 / 0
народ у всех этот хак помог?
а то у меня только список производителя в дропдаун меню становиля меньше в какой либо категории, но при нажантии на производителя, выкидывает все товары из разных категорий... вроде исправлял код тщательно...
*

abbat_gro

  • Осваиваюсь на форуме
  • 12
  • 0 / 0
Я так понимаю это сортировка во фронтенде! А меня интересует, как бы добавить сортировку в админке VM , а то товаров много, и когда хочется отсортировать по производителях. такой облом настает! Помогите, люди добрые!
меня это дело тоже очень волнует... есть ли готовые решения?
*

AlexeyK

  • Осваиваюсь на форуме
  • 34
  • 1 / 0
А подскажите как к этому еще организовать сортировку по типам товара?
*

morph

  • Давно я тут
  • 924
  • 105 / 0
*

Luchik

  • Захожу иногда
  • 57
  • 6 / 0
Крута. Работает! :)
Спасибо.

+ тебе
« Последнее редактирование: 05.11.2009, 09:39:59 от Luchik »
*

Sulpher

  • Живу я здесь
  • 2136
  • 402 / 16
  • Шаблоны и расширения Joomla
Вот готовый хак для VirtueMart 1.1.4. Распаковать и записать поверх. (на ваш страх и риск - если ранее были внесены модификации в данные файлы, то они будут затёрты)

[вложение удалено Администратором]
*

igoryk

  • Захожу иногда
  • 183
  • 11 / 0
Вот готовый хак для VirtueMart 1.1.4. Распаковать и записать поверх. (на ваш страх и риск - если ранее были внесены модификации в данные файлы, то они будут затёрты)

Есть баг - если в категории один товар данного производителя. то форма сортировки исчезает :(

Как решить?
*

morph

  • Давно я тут
  • 924
  • 105 / 0
Есть баг - если в категории один товар данного производителя. то форма сортировки исчезает :(

Как решить?
это не баг а условие на вывод шаблона сортировки (что сортировать если товаров 1 или 2 ?).смотри shop.browse.php
*

kpk17

  • Захожу иногда
  • 257
  • 2 / 0

а не подскажете как сделать чтобы этот список выводился автоматически на всю страницу, чтобы сразу шло разделение по производителям и товарам

acer
товар 1
товар2

asus
товар3
товар4

и так далее

сорри за множественность темы
*

RedFlash

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Спасибо за решение!
Один вопрос - где можно изменить слово "Выбор" , которое по умолчанию в дроп даун списке выводится на свое, например "производитель"
*

ws_green

  • Захожу иногда
  • 71
  • 1 / 0
Работает, не подскажешь как вывести не выпадающим меню, а ссылками всех брендов?  Или в выпадающем меню слово выбрать изменить на "Выбрать производителя"

Кому интересно, чтобы вывести фильтр производителей не в выпадающем списке, а в виде ссылок, открываем файл browse_filterbymf.tpl
и ищем строки

Код
			foreach ($res as $manufacturer) { 
$selected = '';
if( @$_REQUEST['manufacturer_id'] == $manufacturer->manufacturer_id ) {
$selected = 'selected="selected"';     
}
echo "<option value=\"".$manufacturer->manufacturer_id ."\" $selected>". $manufacturer->mf_name ."</option>\n";

}

заменяем на
Код
			foreach ($res as $manufacturer) { 

echo '<a href="index.php?DescOrderBy=ASC&manufacturer_id=' . $manufacturer->manufacturer_id . '&amp;option=com_virtuemart&amp;Itemid='. $Itemid . '&amp;category_id=' . $category_id . '&amp;page=shop.browse">' . $manufacturer->mf_name . '</a><br />';


}

Столкнулся с проблемой. Нужна сортировка внутри списка производителей по категориям. Возможно ли это сделать?
*

dinox

  • Захожу иногда
  • 235
  • 42 / 0
  • Чего-то здесь не хватает...
Кому интересно, чтобы вывести фильтр производителей не в выпадающем списке, а в виде ссылок, открываем файл browse_filterbymf.tpl
и ищем строки
Ты забыл написать что надо убрать все что относится к форме. Ато я так сразу поставил, а оно не работет.

Спасибо за суперскую фильтрацию, мне надо была такая штука для модуля производителей я туда ее вставил и теперь работает точно так как надо! А отсюда убрал из-за неудобного размещения

Столкнулся с проблемой. Нужна сортировка внутри списка производителей по категориям. Возможно ли это сделать?
Мне такое вот тоже надо, буду думать как осуществить если придумаю напишу сюда ^-^
« Последнее редактирование: 08.03.2010, 15:48:42 от dinox »
Дай каждому дню шанс стать самым прекрасным в твоей жизни!
Ждем когда microsoft.com перейдет на Joomla!
*

skyscraper

  • Захожу иногда
  • 252
  • 47 / 2
чтобы менюшка выводилось если 1 товар делаем в shop.browse.php так:


if ( $num_rows && @$_REQUEST['output'] != "pdf") {
*

broot

  • Захожу иногда
  • 78
  • 1 / 0
Ты забыл написать что надо убрать все что относится к форме. Ато я так сразу поставил, а оно не работет.

Спасибо за суперскую фильтрацию, мне надо была такая штука для модуля производителей я туда ее вставил и теперь работает точно так как надо! А отсюда убрал из-за неудобного размещения
Мне такое вот тоже надо, буду думать как осуществить если придумаю напишу сюда ^-^

можете боле детально расписать чтоб фильтр біл сылками и в одну строчку, а то почемуто получаеться в столбик-))
*

sett

  • Захожу иногда
  • 54
  • 0 / 0
блин, у меня почему-то в опере отображается "Показать по:", а в мозиле и эксплорере пропала эта штука... в чем может быть дело??
*

sett

  • Захожу иногда
  • 54
  • 0 / 0
проблема с чего началась, в категории - 6 товаров, было отображение на 5 товаров на страницу, сделал отображение на 20, показать пропала и больше не появляется ни в одной категории!
самое интересное, если сделать шаг назад и заново сделать отображение на 5 товаров на страницу, то показать появляется на всех других страницах.. как-будто записывает куда-то... SEF не стоит
« Последнее редактирование: 05.04.2010, 01:17:41 от sett »
*

linur

  • Осваиваюсь на форуме
  • 10
  • 1 / 0
Обычно я не пишу подобные посты, но сейчас не могу не поблагодарить. Спасибо большое за решение, установилось сразу и без косяков!
*

shaiden

  • Новичок
  • 5
  • 0 / 0
Честно признаться - поменял файлы вручную - ноль эффекта ( применялось решение из аттача FilterManufactorer_VM_1.1.4.zip)
*

neutomim30

  • Захожу иногда
  • 86
  • 0 / 0
ничего не изменилось после того как закинул на сайт файлы..в чем же может быть дело? новое поле даже не появлилось
*

neutomim30

  • Захожу иногда
  • 86
  • 0 / 0
то есть хак у меня почему то не работает - Вирту 1.1.4
*

MR.TOR

  • Новичок
  • 8
  • 0 / 0
Хак отличный, СПАСИБО!
У меня вот какая проблема возникла. До установки Artio JoomSEF все работало. После, сортировка по производителю работает через раз. Нужно чтоб выводило (index.php?orderby=product_list&DescOrderBy=ASC&manufacturer_id=3&Itemid=2&option=com_virtuemart&page=shop.browse&category_id=1&limitstart=0&keyword=&keyword1=&keyword2=)
а выводит
(glavnaya/svi.html?limitstart=0&amp;orderby=product_price&amp;DescOrderBy=ASC&amp;keyword=&amp;keyword1=&amp;keyword2=)
Может что нужно в хаке изменить, или лучше в Artio правило создать(как содать правило?), если кто знает поделитесь. Буду благодарен.
*

ArtTheft

  • Осваиваюсь на форуме
  • 23
  • 0 / 0
Хм...подскажите как добавить сортировку по всем производителям..
*

styan

  • Новичок
  • 6
  • 0 / 0
Модератору огромное спасибо за хак! Фильтр по производителю работает на ура!
Еще бы посмотреть где-нить как сделать такой же фильтр по типу товара... Народ, может кто подскажет?
*

Timofey

  • Осваиваюсь на форуме
  • 44
  • 0 / 0
Спасибо большое всё работает просто отлично на VM 1.1.4 толко подскажите пожалуйста как можно изменить надпись Select Manufacturer
А всё нашёл сам это в browse_filterbymf.tpl.php ещё раз спасибо.
« Последнее редактирование: 25.07.2010, 11:50:38 от Timofey »
*

BlackinWhite

  • Захожу иногда
  • 85
  • 0 / 0
Все сделал. Только не пойму почему в Select Manufacturer пусто, кроме "Выбрать" ничего нет, хотя Производители созданы, Товары закриплены за производителями.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

VirtueMart - SMS уведомления о сделаном заказе.

Автор bork

Ответов: 42
Просмотров: 23567
Последний ответ 26.07.2021, 22:11:25
от Oleg91
Отчеты и статистика для VirtueMart

Автор 4kict

Ответов: 25
Просмотров: 10546
Последний ответ 14.01.2021, 00:09:53
от gartes
Сортировка товаров по дате поступления

Автор coob

Ответов: 2
Просмотров: 2703
Последний ответ 21.06.2018, 08:40:05
от kungurskiy
IceVmCart - новый бесплатный модуль корзины для VirtueMart

Автор Grig2009

Ответов: 105
Просмотров: 54550
Последний ответ 05.02.2017, 11:44:02
от Super_Panda
Модуль недавно просмотренные товары для VirtueMart 1.1.X

Автор aleks_yug

Ответов: 97
Просмотров: 28712
Последний ответ 25.10.2016, 15:03:07
от Igoritaly