Как вывести список пользователей и оформить его шаблоном XSL?

#
Re: Как вывести список пользователей и оформить его шаблоном XSL?
Пользуемся:
Юзеры с транзакциями внутри
<?php

/**
* @author James
* @copyright 2009
*/

// проверим существование класса SiteUsers
if (class_exists('SiteUsers')) {
   
    // создадим экземпляр класса SiteUsers
    $SiteUsers = &singleton('SiteUsers');
    // создадим экземпляр класса Shop
    $sv_shop = &singleton('shop');
    $shop_shops_id = 10;

    // получим список пользователей
    $resource = $SiteUsers->GetAllUsers();

    // подготовим массив для генерации XML
    // подробнее см. api класса ExternalXml, метод GenXml()
    $users = array();
    $usersCount = 0;
    while ($row = mysql_fetch_assoc($resource)) {
        $usersCount++;
        $user_item = array();
        $user_item['xml_name'] = 'user';
        $user_item['attribute'] = array('id' => $row['site_users_id']);
        $user_value = array();
        foreach ($row as $key => $value) {
            if ($key != 'site_users_id') {
                $node = array();
                $node['xml_name'] = $key;
                $node['value'] = $value;
                $user_value[] = $node;
            }
        }

        // добавленный кусок для свойств
        $propertysRow = $SiteUsers->GetListExtraProperties($row['site_users_id']);
        $propertys = array();
        $propertysValue = array();
        $propertys['xml_name'] = 'extra_propertys';
        foreach ($propertysRow as $key => $value) {
            $propertyItem = array();
            $propertyItem['xml_name'] = 'extra_property';
            $propertyItem['attribute'] = array('id' => $value['site_users_extra_property_id']);
            $propertyValue = array();
            foreach ($value as $newkey => $newvalue) {
                if (!is_numeric($newkey)) {
                    $node = array();
                    $node['xml_name'] = $newkey;
                    $node['value'] = $newvalue;
                    $propertyValue[] = $node;
                }
            }
            $propertyItem['value'] = $propertyValue;
            $propertysValue[] = $propertyItem;
        }
        $propertys['value'] = $propertysValue;
        $user_value[] = $propertys;
        // конец добавленного куска для свойств

        // и вот сюда вписываем код для суммы на счету у юзера
        $sum = $sv_shop->GetSiteUserAccountSum($item_user_id, $shop_shops_id);
        $node = array();
        $node['xml_name'] = 'users_sum';
        $node['value'] = $sum;
        $user_value[] = $node;

        // а вот сюда - код для транзакций
        $transactions = array();
        $transactionsValue = array();
        $transactions['xml_name'] = 'transactions';
        $trans_resource = $sv_shop->GetAllSiteUserAccountTransaction($site_users_id);
        while ($trans_row = mysql_fetch_assoc($trans_resource)) {
            $transaction_item = array();
            $transaction_item['xml_name'] = 'transaction';
            $transactionItemValue = array();
            foreach ($trans_row as $trans_key => $trans_value) {
                $node = array();
                $node['xml_name'] = $trans_key;
                $node['value'] = $trans_value;
                $transactionItemValue[] = $node;
            }
            $transaction_item['value'] = $transactionItemValue;
            $transactionsValue[] = $transaction_item;
        }
        $transactions['value'] = $transactionsValue;
        $user_value[] = $transactions;

        $user_item['value'] = $user_value;
        $users[] = $user_item;
    }

    // cгенерируем XML
    $ExternalXml = &singleton('ExternalXml');
    $type = 1;
    $usersxml = '<?xml version="1.0" encoding="windows-1251"?><users count="' . $usersCount .
        '">' . $ExternalXml->GenXml($users, $type) . '</users>';

    // Применим XSL-шаблон и выведем страницу
    $xsl = &singleton('xsl');
    $xsl_name = 'XSL_для_пользователей_сайта';
    echo $xsl->build($usersxml, $xsl_name);
}
?>
Заказов не беру. Консультирую редко.
#
Re: Как вывести список пользователей и оформить его шаблоном XSL?
Чуть-чуть поправил пару переменных
<?php
/**
* @author James
* @copyright 2009
*/

// проверим существование класса SiteUsers
if (class_exists('SiteUsers')) {
    // создадим экземпляр класса SiteUsers
    $SiteUsers = &singleton('SiteUsers');
    // создадим экземпляр класса Shop
    $shop = &singleton('shop');

    $shop_shops_id = 10;

    // получим список пользователей
    $resource = $SiteUsers->GetAllUsers();

    // подготовим массив для генерации XML
    // подробнее см. api класса ExternalXml, метод GenXml()
    $users = array();
    $usersCount = 0;
    while ($row = mysql_fetch_assoc($resource)) {
        $item_user_id = $row['site_users_id'];
        $usersCount++;
        $user_item = array();
        $user_item['xml_name'] = 'user';
        $user_item['attribute'] = array('id' => $item_user_id);
        $user_value = array();
        foreach ($row as $key => $value) {
            if ($key != 'site_users_id') {
                $node = array();
                $node['xml_name'] = $key;
                $node['value'] = $value;
                $user_value[] = $node;
            }
        }

        // добавленный кусок для свойств
        $propertysRow = $SiteUsers->GetListExtraProperties($item_user_id);
        $propertys = array();
        $propertysValue = array();
        $propertys['xml_name'] = 'extra_propertys';
        foreach ($propertysRow as $key => $value) {
            $propertyItem = array();
            $propertyItem['xml_name'] = 'extra_property';
            $propertyItem['attribute'] = array('id' => $value['site_users_extra_property_id']);
            $propertyValue = array();
            foreach ($value as $newkey => $newvalue) {
                if (!is_numeric($newkey)) {
                    $node = array();
                    $node['xml_name'] = $newkey;
                    $node['value'] = $newvalue;
                    $propertyValue[] = $node;
                }
            }
            $propertyItem['value'] = $propertyValue;
            $propertysValue[] = $propertyItem;
        }
        $propertys['value'] = $propertysValue;
        $user_value[] = $propertys;
        // конец добавленного куска для свойств


        // и вот сюда вписываем код для суммы на счету у юзера
        $sum = $shop->GetSiteUserAccountSum($item_user_id, $shop_shops_id);
        $node = array();
        $node['xml_name'] = 'users_sum';
        $node['value'] = $sum;
        $user_value[] = $node;
        // конец кода для суммы

        // а вот сюда - код для транзакций
        $transactions = array();
        $transactionsValue = array();
        $transactions['xml_name'] = 'transactions';
        $trans_resource = $shop->GetAllSiteUserAccountTransaction($item_user_id, $shop_shops_id);
        while ($trans_row = mysql_fetch_assoc($trans_resource)) {
            $transaction_item = array();
            $transaction_item['xml_name'] = 'transaction';
            $transactionItemValue = array();
            foreach ($trans_row as $trans_key => $trans_value) {
                $node = array();
                $node['xml_name'] = $trans_key;
                $node['value'] = $trans_value;
                $transactionItemValue[] = $node;
            }
            $transaction_item['value'] = $transactionItemValue;
            $transactionsValue[] = $transaction_item;
        }
        $transactions['value'] = $transactionsValue;
        $user_value[] = $transactions;
        // конец обработки транзакций

        $user_item['value'] = $user_value;
        $users[] = $user_item;
    }

    // cгенерируем XML
    $ExternalXml = &singleton('ExternalXml');
    $type = 1;
    $usersxml = '<?xml version="1.0" encoding="windows-1251"?><users count="' . $usersCount .
        '">' . $ExternalXml->GenXml($users, $type) . '</users>';

    // Отладка - просмотр сгенерированного xml
    //echo nl2br(htmlspecialchars($usersxml));

    // Применим XSL-шаблон и выведем страницу
    $xsl = &singleton('xsl');
    $xsl_name = 'XSL_для_пользователей_сайта';
    echo $xsl->build($usersxml, $xsl_name);
}
?>
Заказов не беру. Консультирую редко.
#
Re: Как вывести список пользователей и оформить его шаблоном XSL?
А вот вам, пожалуйста, и пример простейшего XSL-шаблона для того xml, который создается скриптом из предыдущего поста:
<?xml version="1.0" encoding="windows-1251"?>
<!DOCTYPE xsl:stylesheet>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output xmlns="http://www.w3.org/TR/xhtml1/strict" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" encoding="Windows-1251" indent="yes" method="html" omit-xml-declaration="no" version="1.0" media-type="text/xml"/>

   <xsl:template match="users">
      <h1>Пользователи</h1>
      <p>Всего пользователей - <xsl:value-of select="@count"/>.</p>
      <xsl:apply-templates select="user"/>
   </xsl:template>

   <xsl:template match="user">
      <div class="user">
         <h3>Идентифтикатор пользователя
            <xsl:value-of select="@id"/>,
   логин -
            <xsl:value-of select="site_users_login"/>.</h3>
         <p>Аватрака: <xsl:value-of select="extra_propertys/extra_property[site_users_extra_property_name = 'avatar']/site_users_property_value"/></p>
         <p>Сумма на счете: <xsl:value-of select="users_sum"/></p>
         <p>Данные о транзакциях:</p>
         <xsl:apply-templates select="transactions/transaction"/>
         <p>Всего транзакций: <xsl:value-of select="count(transactions/transaction)"/>.</p>
      </div>
   </xsl:template>

   <xsl:template match="transaction">
      <p>Дата: <xsl:value-of select="shop_site_users_account_datetime"/>,
номер заказа: <xsl:value-of select="shop_order_id"/>,
описание заказа <xsl:value-of select="shop_site_users_account_description"/>,
сумма: <xsl:apply-templates select="shop_site_users_account_sum"/></p>
   </xsl:template>
</xsl:stylesheet>
Заказов не беру. Консультирую редко.
Модератор
#
Re: Как вывести список пользователей и оформить его шаблоном XSL?
Пример контроллера для шестой версии http://www.hostcms.ru/forums/3/8580/
Авторизация