0

我怎么能添加选项来显示上个月的统计数据。

PHP

public function chart() {
    $this->load->language('common/home');

    $data = array();

    $data['order'] = array();
    $data['customer'] = array();
    $data['xaxis'] = array();

    $data['order']['label'] = $this->language->get('text_order');
    $data['customer']['label'] = $this->language->get('text_customer');

    if (isset($this->request->get['range'])) {
        $range = $this->request->get['range'];
    } else {
        $range = 'month';
    }

    switch ($range) {
        case 'day':
            for ($i = 0; $i < 24; $i++) {
                $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0' AND (DATE(date_added) = DATE(NOW()) AND HOUR(date_added) = '" . (int)$i . "') GROUP BY HOUR(date_added) ORDER BY date_added ASC");

                if ($query->num_rows) {
                    $data['order']['data'][]  = array($i, (int)$query->row['total']);
                } else {
                    $data['order']['data'][]  = array($i, 0);
                }

                $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "customer WHERE DATE(date_added) = DATE(NOW()) AND HOUR(date_added) = '" . (int)$i . "' GROUP BY HOUR(date_added) ORDER BY date_added ASC");

                if ($query->num_rows) {
                    $data['customer']['data'][] = array($i, (int)$query->row['total']);
                } else {
                    $data['customer']['data'][] = array($i, 0);
                }

                $data['xaxis'][] = array($i, date('H', mktime($i, 0, 0, date('n'), date('j'), date('Y'))));
            }                   
            break;
        case 'week':
            $date_start = strtotime('-' . date('w') . ' days'); 

            for ($i = 0; $i < 7; $i++) {
                $date = date('Y-m-d', $date_start + ($i * 86400));

                $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0' AND DATE(date_added) = '" . $this->db->escape($date) . "' GROUP BY DATE(date_added)");

                if ($query->num_rows) {
                    $data['order']['data'][] = array($i, (int)$query->row['total']);
                } else {
                    $data['order']['data'][] = array($i, 0);
                }

                $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "customer` WHERE DATE(date_added) = '" . $this->db->escape($date) . "' GROUP BY DATE(date_added)");

                if ($query->num_rows) {
                    $data['customer']['data'][] = array($i, (int)$query->row['total']);
                } else {
                    $data['customer']['data'][] = array($i, 0);
                }

                $data['xaxis'][] = array($i, date('D', strtotime($date)));
            }

            break;
        default:
        case 'month':
            for ($i = 1; $i <= date('t'); $i++) {
                $date = date('Y') . '-' . date('m') . '-' . $i;

                $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0' AND (DATE(date_added) = '" . $this->db->escape($date) . "') GROUP BY DAY(date_added)");

                if ($query->num_rows) {
                    $data['order']['data'][] = array($i, (int)$query->row['total']);
                } else {
                    $data['order']['data'][] = array($i, 0);
                }   

                $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "customer WHERE DATE(date_added) = '" . $this->db->escape($date) . "' GROUP BY DAY(date_added)");

                if ($query->num_rows) {
                    $data['customer']['data'][] = array($i, (int)$query->row['total']);
                } else {
                    $data['customer']['data'][] = array($i, 0);
                }   

                $data['xaxis'][] = array($i, date('j', strtotime($date)));
            }
            break;
        case 'year':
            for ($i = 1; $i <= 12; $i++) {
                $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0' AND YEAR(date_added) = '" . date('Y') . "' AND MONTH(date_added) = '" . $i . "' GROUP BY MONTH(date_added)");

                if ($query->num_rows) {
                    $data['order']['data'][] = array($i, (int)$query->row['total']);
                } else {
                    $data['order']['data'][] = array($i, 0);
                }

                $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "customer WHERE YEAR(date_added) = '" . date('Y') . "' AND MONTH(date_added) = '" . $i . "' GROUP BY MONTH(date_added)");

                if ($query->num_rows) { 
                    $data['customer']['data'][] = array($i, (int)$query->row['total']);
                } else {
                    $data['customer']['data'][] = array($i, 0);
                }

                $data['xaxis'][] = array($i, date('M', mktime(0, 0, 0, $i, 1, date('Y'))));
            }           
            break;  
    } 

    $this->response->setOutput(json_encode($data));
}

HTML

<select name="range">
    <option value="day">Today</option>
    <option value="week">This Week</option>
    <option value="month">This Month</option>
    <option value="year">This Year</option>
</select>   

来自@Andy 的 Qvmod 回答:

<file name="admin/controller/common/home.php">
    <operation>
           <search position="before"><![CDATA[case 'year':]]></search>
           <add><![CDATA[

        case 'month_previous':
            for ($i = 1; $i <= date('t', strtotime(date('Y-m', strtotime('-1 month')).'-01')); $i++) {
                $date = date('Y-m', strtotime('-1 month')).'-'.$i;

                $query = $this->db->query("SELECT COUNT(*) AS total FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0' AND (DATE(date_added) = '" . $this->db->escape($date) . "') GROUP BY DAY(date_added)");

                if ($query->num_rows) {
                    $data['order']['data'][] = array($i, (int)$query->row['total']);
                } else {
                    $data['order']['data'][] = array($i, 0);
                }   

                $query = $this->db->query("SELECT COUNT(*) AS total FROM " . DB_PREFIX . "customer WHERE DATE(date_added) = '" . $this->db->escape($date) . "' GROUP BY DAY(date_added)");

                if ($query->num_rows) {
                    $data['customer']['data'][] = array($i, (int)$query->row['total']);
                } else {
                    $data['customer']['data'][] = array($i, 0);
                }   

                $data['xaxis'][] = array($i, date('j', strtotime($date)));
            }
        break;

        ]]></add>
       </operation>
</file>
<file name="admin/view/template/common/home.tpl">
    <operation>
        <search position="after"><![CDATA[<option value="month"><?php echo $text_month; ?></option>]]></search>
        <add><![CDATA[          
            <option value="month_previous">Last Month</option>
        ]]></add>
    </operation>
</file>
4

1 回答 1

1

创建一个新的 HTML 选项

    <option value="last_month">Last Month</option>

然后为您的 last_month 选项添加一个新的开关盒。您可以通过将月份案例从案例“月份”行复制到中断来做到这一点;。

在 for 循环中将 date('t') 更改为:

    date('t', strtotime(date('Y-m', strtotime('-1 month')).'-01'))

这将允许您获取上个月的天数,然后您应该更改的最后一位将是 $date var。以与上述类似的方式:

    $date = date('Y-m', strtotime('-1 month')).'-'.$i;

这应该允许您查看上个月的所有统计信息。

于 2012-11-18T10:56:03.677 回答