html.php
来自「一款可以和GOOGLE媲美的开源统计系统,运用AJAX.功能强大. 无色提示:」· PHP 代码 · 共 273 行
PHP
273 行
<?php/** * Piwik - Open source web analytics * * @link http://piwik.org * @license http://www.gnu.org/licenses/gpl-3.0.html Gpl v3 or later * @version $Id: Html.php 581 2008-07-27 23:07:52Z matt $ * * @package Piwik_ViewDataTable *//** * * Outputs an AJAX Table for a given DataTable. * * Reads the requested DataTable from the API. * * @package Piwik_ViewDataTable * */class Piwik_ViewDataTable_Html extends Piwik_ViewDataTable{ /** * Array of columns names to display * * @var array */ protected $columnsToDisplay = array(); /** * Array of columns names translations * * @var array */ protected $columnsTranslations = array(); /** * PHP array conversion of the Piwik_DataTable * * @var array */ public $arrayDataTable; // phpArray /** * @see Piwik_ViewDataTable::init() */ function init($currentControllerName, $currentControllerAction, $moduleNameAndMethod, $actionToLoadTheSubTable = null ) { parent::init($currentControllerName, $currentControllerAction, $moduleNameAndMethod, $actionToLoadTheSubTable); $this->dataTableTemplate = 'CoreHome/templates/datatable.tpl'; $this->variablesDefault['enable_sort'] = true; // load general columns translations $this->setColumnTranslation('nb_visits', Piwik_Translate('General_ColumnNbVisits')); $this->setColumnTranslation('label', Piwik_Translate('General_ColumnLabel')); $this->setColumnTranslation('nb_uniq_visitors', Piwik_Translate('General_ColumnNbUniqVisitors')); } /** * @see Piwik_ViewDataTable::main() * */ public function main() { if($this->mainAlreadyExecuted) { return; } $this->mainAlreadyExecuted = true; $this->loadDataTableFromAPI(); // We apply a filter to the DataTable, decoding the label column (useful for keywords for example) $filter = new Piwik_DataTable_Filter_ColumnCallbackReplace( $this->dataTable, 'label', 'urldecode' ); $view = new Piwik_View($this->dataTableTemplate); // We get the PHP array converted from the DataTable $phpArray = $this->getPHPArrayFromDataTable(); $view->arrayDataTable = $phpArray; $view->method = $this->method; $columns = $this->getColumnsToDisplay($phpArray); $view->dataTableColumns = $columns; $nbColumns = count($columns); // case no data in the array we use the number of columns set to be displayed if($nbColumns == 0) { $nbColumns = count($this->columnsToDisplay); } $view->nbColumns = $nbColumns; $view->id = $this->getUniqIdTable(); $view->javascriptVariablesToSet = $this->getJavascriptVariablesToSet(); $view->showFooter = $this->getShowFooter(); $this->view = $view; } /** * Returns friendly php array from the Piwik_DataTable * @see Piwik_DataTable_Renderer_Php * @return array */ protected function getPHPArrayFromDataTable() { $renderer = Piwik_DataTable_Renderer::factory('php'); $renderer->setTable($this->dataTable); $renderer->setSerialize( false ); // we get the php array from the datatable // but conserving the original datatable format, which means rows 'columns', 'metadata' and 'idsubdatatable' $phpArray = $renderer->originalRender(); return $phpArray; } /** * Sets the columns that will be displayed in the HTML output * By default all columns are displayed ($columnsNames = array() will display all columns) * * @param array $columnsNames Array of column names eg. array('nb_visits','nb_hits') */ public function setColumnsToDisplay( $columnsNames) { $this->columnsToDisplay = $columnsNames; } /** * Sets translation string for given column * * @param string $columnName column name * @param string $columnTranslation column name translation */ public function setColumnTranslation( $columnName, $columnTranslation ) { $this->columnsTranslations[$columnName] = $columnTranslation; } /** * Returns column translation if available, in other case given column name * * @param string $columnName column name */ public function getColumnTranslation( $columnName ) { if( isset($this->columnsTranslations[$columnName]) ) { return $this->columnsTranslations[$columnName]; } else { return $columnName; } } /** * Sets columns translations array. * * @param array $columnsTranslations An associative array indexed by column names, eg. array('nb_visit'=>"Numer of visits") */ public function setColumnsTranslations( $columnsTranslations ) { $this->columnsTranslations = $columnsTranslations; } /** * Returns array( * array('id' => 1, 'name' => 'nb_visits'), * array('id' => 3, 'name' => 'nb_uniq_visitors'), * * @param array PHP array conversion of the data table * @return array */ protected function getColumnsToDisplay($phpArray) { $dataTableColumns = array(); if(count($phpArray) > 0) { // build column information $id = 0; foreach($phpArray[0]['columns'] as $columnName => $row) { if( $this->isColumnToDisplay( $id, $columnName) ) { $dataTableColumns[] = array('id' => $id, 'name' => $columnName, 'displayName' => $this->getColumnTranslation($columnName) ); } $id++; } } return $dataTableColumns; } /** * Returns true if the given column (id = $idColumn or name = $nameColumn) is set to be displayed. * * @param int $idColumn * @param string $nameColumn * @return bool */ protected function isColumnToDisplay( $idColumn, $nameColumn ) { // we return true // - we didn't set any column to display (means we display all the columns) // - the column has been set as to display if( count($this->columnsToDisplay) == 0 || in_array($idColumn, $this->columnsToDisplay) || in_array($nameColumn, $this->columnsToDisplay)) { return true; } return false; } /** * Sets the columns in the HTML table as not sortable (they are not clickable) * * @return void */ public function disableSort() { $this->variablesDefault['enable_sort'] = 'false'; } /** * Sets the search on a table to be recursive (also searches in subtables) * Works only on Actions/Downloads/Outlinks tables. * * @return bool If the pattern for a recursive search was set in the URL */ public function setSearchRecursive() { $this->variablesDefault['search_recursive'] = true; return $this->setRecursiveLoadDataTableIfSearchingForPattern(); } /** * Set the flag to load the datatable recursively so we can search on subtables as well * * @return bool if recursive search is enabled */ protected function setRecursiveLoadDataTableIfSearchingForPattern() { try{ $requestValue = Piwik_Common::getRequestVar('filter_column_recursive'); $requestValue = Piwik_Common::getRequestVar('filter_pattern_recursive'); // if the 2 variables are set we are searching for something. // we have to load all the children subtables in this case $this->recursiveDataTableLoad = true; return true; } catch(Exception $e) { $this->recursiveDataTableLoad = false; return false; } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?