【问题标题】:How can I use callback functions in groceryCrud for the view record page?如何在groceryCrud 中为查看记录页面使用回调函数?
【发布时间】:2015-07-07 09:36:48
【问题描述】:

我不知道如何在codeigniter中为查看记录页面设置回调函数。

我使用 callback_column 函数,它在网格视图中执行我需要的操作,但在视图记录页面上它不起作用。

我搜索了他们的网站和论坛,没有找到任何可以帮助我的东西。

我的代码如下:

$zeus = new grocery_CRUD();
$zeus->set_theme('bootstrap');
// $zeus->set_language('romanian');

$zeus->set_table('programari');
$zeus->columns(array('id_client', 'id_sala', 'denumire', 'numar_persoane', 'observatii'));

$zeus->callback_column('id_sala',array($this,'_test_function'));

$cod = $zeus->render();

$this->_afiseaza_panou($cod);

public function _test_function($row, $value)
{
  return '0';
}

【问题讨论】:

    标签: php codeigniter grocery-crud


    【解决方案1】:

    在 \libraries\Grocery_CRUD.php 中写下这一行

    在第 3530 行

    protected $callback_read_field      = array();
    

    比把这个函数放在构造函数调用之后

    public function callback_read_field($field, $callback = null)
    {
        $this->callback_read_field[$field] = $callback;
    
        return $this;
    }
    
    
    //Now update this function to manage the field outputs using callbacks if they are defined for the same
    protected function get_read_input_fields($field_values = null)
    {
        $read_fields = $this->get_read_fields();
    
        $this->field_types = null;
        $this->required_fields = null;
    
        $read_inputs = array();
        foreach ($read_fields as $field) {
            if (!empty($this->change_field_type)
                    && isset($this->change_field_type[$field->field_name])
                    && $this->change_field_type[$field->field_name]->type == 'hidden') {
                continue;
            }
            $this->field_type($field->field_name, 'readonly');
        }
    
        $fields = $this->get_read_fields();
        $types  = $this->get_field_types();
    
        $input_fields = array();
    
        foreach($fields as $field_num => $field)
        {
            $field_info = $types[$field->field_name];
    
            if(isset($field_info->db_type) && ($field_info->db_type == 'tinyint' || ($field_info->db_type == 'int' && $field_info->db_max_length == 1))) {
                $field_value = $this->get_true_false_readonly_input($field_info, $field_values->{$field->field_name});
            } else {
                $field_value = !empty($field_values) && isset($field_values->{$field->field_name}) ? $field_values->{$field->field_name} : null;
            }
            if(!isset($this->callback_read_field[$field->field_name]))
            {
                $field_input = $this->get_field_input($field_info, $field_value);
            }
            else
            {
                $primary_key = $this->getStateInfo()->primary_key;
                $field_input = $field_info;
                $field_input->input = call_user_func($this->callback_read_field[$field->field_name], $field_value, $primary_key, $field_info, $field_values);
            }
    
            switch ($field_info->crud_type) {
                case 'invisible':
                    unset($this->read_fields[$field_num]);
                    unset($fields[$field_num]);
                    continue;
                    break;
                case 'hidden':
                    $this->read_hidden_fields[] = $field_input;
                    unset($this->read_fields[$field_num]);
                    unset($fields[$field_num]);
                    continue;
                    break;
            }
    
            $input_fields[$field->field_name] = $field_input;
        }
    
        return $input_fields;
    }
    

    比调用其他回调函数一样

    【讨论】:

      【解决方案2】:

      据我所知,GroceryCRUD 不提供回调或其他覆盖视图状态默认输出的方法。

      对此进行自定义的解决方案是创建一个自定义视图,您将从记录中插入数据。这样您就可以自定义布局和其他演示文稿。

      然后您要做的是取消设置默认读取视图:

      $crud->unset_read();
      

      并添加一个新操作,其中包含有关如何执行此操作的详细信息here

      如果需要,新操作将指向您在routes.php 中映射的 URL,并使用控制器中的新函数对其进行处理。您要么必须编写一个模型函数来检索数据,因为这不是从 GC 传递的,要么您可以使用该操作来定位回调并通过 POST 或其他方式将 $row 提供给它,以便数据用于该记录可在视图中访问。 (查看上面链接中的示例)。

      【讨论】:

        猜你喜欢
        • 2013-11-06
        • 2014-05-30
        • 2015-03-26
        • 2016-03-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-27
        • 1970-01-01
        相关资源
        最近更新 更多