БЛОГОДЖУМЛА - БЛОГ О ДЖУМЛА

Список заказов покупателя в админке

  • Категория: Virtuemart 1
  • Автор:
  • Просмотров: 12785

Очень часто администраторы интернет магазинов на базе Joomla Virtuemart при просмотре списка поступивших заказов в админке хотят видеть сколько было заказов у каждого клиента. Первый это заказ или повторный? Я покажу как вывести эту информацию.

В итоге получим следующую картинку:


Список заказов покупателя

При нажатии на количество заказов попадаем на страницу со списком этих заказов


Список заказов покупателя

Хак рассматриваем для virtuemart v.1.1.4, для последующих версий всё также.

Открываем файл \administrator\components\com_virtuemart\html\order.order_list.php

Добавляем колонку и её заголовок:

Находим в районе 98 строки

 



 $VM_LANG->_('PHPSHOP_ORDER_PRINT_NAME') => '',
 

И поле добавляем:

 



 
 'Заказы' => '',
				 

После

 




$dbl =& new ps_DB;

Добавляем

 




$dbz = new ps_DB;

Находим

 




$tmp_cell = $db->f('first_name').' '.$db->f('last_name');
	if( $perm->check('admin') && defined('_VM_IS_BACKEND')) {
		$url = $_SERVER['PHP_SELF']."?page=admin.user_form&user_id=". $db->f("user_id");
		$tmp_cell = '<a href="'.$sess->url( $url ).'">'.$tmp_cell.'</a>';
	}

	$listObj->addCell( $tmp_cell );

После этого добавляем

 




	$lizt  = "SELECT count(*) as num FROM #__{vm}_orders WHERE user_id=".$db->f("user_id");
	
	$dbz->query( $lizt );
	$dbz->next_record();
	if ($dbz->f("num")) {
		$z= $dbz->f("num");
		$url = $_SERVER['PHP_SELF']."?page=admin.user_orders&amp;user_id=". $db->f("user_id");
		$tmp_cell = '<a href="'.$sess->url( $url ).'">'.$z.'</a>';
		$listObj->addCell( $tmp_cell);
	} else {
		$listObj->addCell( 'Нет');
	}

Обязательно сохраняем файл в кодировке "UTF без BOM"

в той же папке создаем файл admin.user_orders.php со следующим содержимым:


 




 



<?php
if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );

mm_showMyFileName( __FILE__ );

global $ps_shopper_group, $ps_product;
global $acl, $database;
include_class( 'shopper' );
include_class( 'product' );

if( !isset($ps_shopper_group)) {
 $ps_shopper_group = new ps_shopper_group();
}

$user_id = intval( vmGet( $_REQUEST, 'user_id' ) );
$cid = vmRequest::getVar( 'cid', array(0), '', 'array' );

if( !empty($user_id) ) {
 $q = "SELECT * FROM #__users AS u LEFT JOIN #__{vm}_user_info AS ui ON id=user_id ";
 $q .= "WHERE id=$user_id ";
 $q .= "AND (address_type='BT' OR address_type IS NULL ) ";
 $q .= "AND gid <= ".$my->gid;
 $db->query($q);
 $db->next_record();
}

// Set up the CMS General User Information
$row = new mosUser( $database );
$row->load( (int) $user_id );

if ( $user_id ) {
 $query = "SELECT *"
 . "\n FROM #__contact_details"
 . "\n WHERE user_id = " . (int) $row->id
 ;
 $database->setQuery( $query );
 $contact = $database->loadObjectList();

 $row->name = trim( $row->name );
 $row->email = trim( $row->email );
 $row->username = trim( $row->username );
 $row->password = trim( $row->password );

} else {
 $contact = NULL;
 $row->block = 0;
}

// check to ensure only super admins can edit super admin info
if ( ( $my->gid < 25 ) && ( $row->gid == 25 ) ) {
 vmRedirect( 'index2.php?option=com_users', _NOT_AUTH );
}

$my_group = strtolower( $acl->get_group_name( $row->gid, 'ARO' ) );
if ( $my_group == 'super administrator' && $my->gid != 25 ) {
 $lists['gid'] = '<input type="hidden" name="gid" value="'. $my->gid .'" /><strong>Super Administrator</strong>';
} else if ( $my->gid == 24 && $row->gid == 24 ) {
 $lists['gid'] = '<input type="hidden" name="gid" value="'. $my->gid .'" /><strong>Administrator</strong>';
} else {
 // ensure user can't add group higher than themselves
 $my_groups = $acl->get_object_groups( 'users', $my->id, 'ARO' );
 if (is_array( $my_groups ) && count( $my_groups ) > 0) {
 $ex_groups = $acl->get_group_children( $my_groups[0], 'ARO', 'RECURSE' );
 if (!$ex_groups) $ex_groups = array();
 } else {
 $ex_groups = array();
 }

 $gtree = $acl->get_group_children_tree( null, 'USERS', false );

 // remove users 'above' me
 $i = 0;
 while ($i < count( $gtree )) {
 if (in_array( $gtree[$i]->value, $ex_groups )) {
 array_splice( $gtree, $i, 1 );
 } else {
 $i++;
 }
 }

 $lists['gid'] = vmCommonHTML::selectList( $gtree, 'gid', 'size="10"', 'value', 'text', $row->gid, true );
}

// build the html select list
$lists['block'] = vmCommonHTML::yesnoRadioList( 'block', 'class="inputbox" size="1"', 'value', 'text', $row->block );
// build the html select list
$lists['sendEmail'] = vmCommonHTML::yesnoRadioList( 'sendEmail', 'class="inputbox" size="1"', 'value', 'text', $row->sendEmail );

$canBlockUser = $acl->acl_check( 'administration', 'edit', 'users', $my->usertype, 'user properties', 'block_user' );
$canEmailEvents = $acl->acl_check( 'workflow', 'email_events', 'users', $acl->get_group_name( $row->gid, 'ARO' ) );

// Get the user parameters
if( vmIsJoomla( '1.5' ) ) {
 require_once( JPATH_ADMINISTRATOR.DS.'components'.DS.'com_users'.DS.'users.class.php' );
 $user =& JUser::getInstance( $user_id );
 $params = $user->getParameters(true);
} elseif( file_exists( $mosConfig_absolute_path . '/administrator/components/com_users/users.class.php' ) ) {
 require_once( $mosConfig_absolute_path . '/administrator/components/com_users/users.class.php' );
 $file = $mainframe->getPath( 'com_xml', 'com_users' );
 $params =& new mosUserParameters( $row->params, $file, 'component' );
}

// Set the last visit date
$lvisit = $row->lastvisitDate;
if ($lvisit == "0000-00-00 00:00:00") {
 $lvisit = '***' . $VM_LANG->_('VM_USER_FORM_LASTVISIT_NEVER');
}

//First create the object and let it print a form heading
$formObj = &new formFactory( vmCommonHTML::imageTag(VM_THEMEURL.'images/administration/header/icon-48-user.png', 'User Icon', 'absmiddle' )
 .'&nbsp;&nbsp;&nbsp;'
 . 'Список заказов покупателя' );
//Then Start the form
$formObj->startForm();

$tabs = new vmTabPanel(0, 1, "userform");
$tabs->startPane("userform-pane");



require_once( CLASSPATH . "pageNavigation.class.php" );
require_once( CLASSPATH . "htmlTools.class.php" );
require_once(CLASSPATH.'ps_order_status.php');
$ps_order_status = new ps_order_status;

$q = "";
$list = "SELECT * FROM #__{vm}_orders ";
$count = "SELECT count(*) as num_rows FROM #__{vm}_orders ";
$q .= "WHERE #__{vm}_orders.vendor_id='".$_SESSION['ps_vendor_id']."' AND #__{vm}_orders.user_id=".$user_id." ";
$q .= "ORDER BY #__{vm}_orders.cdate DESC ";
$count .= $q;
$list .= $q;

$db->query($count);
$db->next_record();
$num_rows = $db->f("num_rows");
if( $num_rows ) {
 $tabs->startTab( $VM_LANG->_('PHPSHOP_ORDER_LIST_LBL') . ' ('.$num_rows.')', "order-list");
 ?>

 <h3><?php echo $VM_LANG->_('PHPSHOP_ORDER_LIST_LBL') ?> </h3>

 <?php

 // Create the Page Navigation
 $pageNav = new vmPageNav( $num_rows, $limitstart, $limit );

 // Create the List Object with page navigation
 $listObj = new listFactory( $pageNav );

 $listObj->startTable();

 // these are the columns in the table
 $columns = Array( "#" => "width=\"20\"",
 $VM_LANG->_('PHPSHOP_ORDER_LIST_ID') => '',
 $VM_LANG->_('PHPSHOP_CHECK_OUT_THANK_YOU_PRINT_VIEW') => '',
 $VM_LANG->_('PHPSHOP_ORDER_LIST_CDATE') => '',
 $VM_LANG->_('PHPSHOP_ORDER_LIST_MDATE') => '',
 $VM_LANG->_('PHPSHOP_ORDER_LIST_STATUS') => '',
 $VM_LANG->_('PHPSHOP_ORDER_LIST_TOTAL') => '',
 $VM_LANG->_('E_REMOVE') => "width=\"5%\""
 );
 $listObj->writeTableHeader( $columns );

 $db->query($list);
 $i = 0;
 while ($db->next_record()) {

 $listObj->newRow();

 // The row number
 $listObj->addCell( $pageNav->rowNumber( $i ) );

 $url = $_SERVER['PHP_SELF']."?page=order.order_print&limitstart=$limitstart&keyword=".urlencode($keyword)."&order_id=". $db->f("order_id");
 $tmp_cell = "<a href=\"" . $sess->url($url) . "\">".sprintf("%08d", $db->f("order_id"))."</a><br />";
 $listObj->addCell( $tmp_cell );

 $details_url = $sess->url( $_SERVER['PHP_SELF']."?page=order.order_printdetails&amp;order_id=".$db->f("order_id")."&amp;no_menu=1");
 $details_url = stristr( $_SERVER['PHP_SELF'], "index2.php" ) ? str_replace( "index2.php", "index3.php", $details_url ) : str_replace( "index.php", "index2.php", $details_url );

 $details_link = "&nbsp;<a href=\"javascript:void window.open('$details_url', 'win2', 'status=no,toolbar=no,scrollbars=yes,titlebar=no,menubar=no,resizable=yes,width=640,height=480,directories=no,location=no');\">";
 $details_link .= "<img src=\"$mosConfig_live_site/images/M_images/printButton.png\" align=\"center\" height=\"16\" width=\"16\" border=\"0\" /></a>";
 $listObj->addCell( $details_link );

 $listObj->addCell( strftime("%d-%b-%y %H:%M", $db->f("cdate")));
 $listObj->addCell( strftime("%d-%b-%y %H:%M", $db->f("mdate")));

 $listObj->addCell( $ps_order_status->getOrderStatusName($db->f("order_status")));

 $listObj->addCell( $CURRENCY_DISPLAY->getFullValue($db->f("order_total")));

 $listObj->addCell( $ps_html->deleteButton( "order_id", $db->f("order_id"), "orderDelete", $keyword, $limitstart. '&user_id='.$user_id ) );

 $i++;
 }

 $listObj->writeTable();

 $listObj->endTable();

 $tabs->endTab();
}
$tabs->endPane();

// Add necessary hidden fields
$formObj->hiddenField( 'address_type', 'BT' );
$formObj->hiddenField( 'address_type_name', '-default-' );
$formObj->hiddenField( 'user_id', $user_id );

$funcname = $user_id ? "userUpdate" : "userAdd";

// Write your form with mixed tags and text fields
// and finally close the form:
$formObj->finishForm( $funcname, 'admin.user_list', $option );

?> 

Сохраняем файл. Наслаждаемся результатом...

Back to top