123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- <?php
- /**
- * @file
- * Definition of views_handler_field_counter.
- */
- /**
- * Field handler to show a counter of the current row.
- *
- * @ingroup views_field_handlers
- */
- class views_handler_field_counter extends views_handler_field {
- /**
- * {@inheritdoc}
- */
- public function option_definition() {
- $options = parent::option_definition();
- $options['counter_start'] = array('default' => 1);
- $options['reverse'] = array('default' => FALSE);
- return $options;
- }
- /**
- * {@inheritdoc}
- */
- public function options_form(&$form, &$form_state) {
- $form['counter_start'] = array(
- '#type' => 'textfield',
- '#title' => t('Starting value'),
- '#default_value' => $this->options['counter_start'],
- '#description' => t('Specify the number the counter should start at.'),
- '#size' => 2,
- );
- $form['reverse'] = array(
- '#type' => 'checkbox',
- '#title' => t('Reverse'),
- '#default_value' => $this->options['reverse'],
- '#description' => t('Reverse the counter.'),
- );
- parent::options_form($form, $form_state);
- }
- /**
- * {@inheritdoc}
- */
- public function query() {
- // Do nothing -- to override the parent query.
- }
- /**
- * {@inheritdoc}
- */
- public function render($values) {
- $reverse = empty($this->options['reverse']) ? 1 : -1;
- // Note: 1 is subtracted from the counter start value below because the
- // counter value is incremented by 1 at the end of this function.
- $counter_start = is_numeric($this->options['counter_start']) ? $this->options['counter_start'] : 0;
- $count = ($reverse == -1) ? count($this->view->result) + $counter_start : $counter_start - 1;
- $pager = $this->view->query->pager;
- // Get the base count of the pager.
- if ($pager->use_pager()) {
- if ($reverse == -1) {
- $count = ($pager->total_items + $counter_start - ($pager->get_current_page() * $pager->get_items_per_page()) + $pager->get_offset());
- }
- else {
- $count += (($pager->get_items_per_page() * $pager->get_current_page() + $pager->get_offset())) * $reverse;
- }
- }
- // Add the counter for the current site.
- $count += ($this->view->row_index + 1) * $reverse;
- return $count;
- }
- }
|