使用Streams时,PyroCMS模块创建失败

时间:2014-12-28 16:58:01

标签: php codeigniter codeigniter-2 pyrocms

我正在使用PyroCMS 2.2.5模块,这就是我在details.php文件中所做的事情:

public function install() {
    $this->dbforge->drop_table( 'payment' );

    $this->load->driver( 'Streams' );

    $this->streams->utilities->remove_namespace( 'payment' );
    if ( $this->db->table_exists( 'data_streams' ) ) {
        $this->db->where( 'stream_namespace', 'payment' )->delete( 'data_streams' );
    }

    $this->install_tables( array(
        'payment' => array(
            'id'            => array(
                'type'           => 'INT',
                'constraint'     => 11,
                'auto_increment' => true,
                'primary'        => true
            ),
            'transactionID' => array(
                'type'       => 'VARCHAR',
                'constraint' => 128
            ),
            'orderTime'     => array(
                'type' => 'TIMESTAMP',
                'null' => false
            ),
            'toReload'      => array(
                'type'       => 'DECIMAL',
                'null'       => false,
                'constraint' => array( 9, 6 ),
                'unsigned'   => false
            ),
            'amt'           => array(
                'type'       => 'DECIMAL',
                'null'       => false,
                'constraint' => array( 9, 6 ),
                'unsigned'   => false
            ),
            'feeAmt'        => array(
                'type'       => 'DECIMAL',
                'null'       => false,
                'constraint' => array( 9, 6 ),
                'unsigned'   => false
            ),
            'currencyCode'  => array(
                'type'       => 'VARCHAR',
                'constraint' => 25
            ),
            'paymentStatus' => array(
                'type'       => 'VARCHAR',
                'constraint' => 25
            ),
            'pendingReason' => array(
                'type' => 'TEXT'
            )
        )
    ) );

    $this->streams->streams->add_stream(
        'lang:payment:streams:payment:name',
        'payment',
        'payment',
        null,
        null
    );

    $this->streams->fields->add_fields( array(
        array(
            'name'         => 'lang:payment:fields:transactionID',
            'slug'         => 'transactionID',
            'namespace'    => 'payment',
            'type'         => 'text',
            'assign'       => 'payment',
            'title_column' => true,
            'required'     => true
        ),
        array(
            'name'         => 'lang:payment:fields:orderTime',
            'slug'         => 'orderTime',
            'namespace'    => 'payment',
            'type'         => 'datetime',
            'extra'        => array( 'storage' => 'unix' ),
            'assign'       => 'payment',
            'title_column' => false,
            'required'     => false,
            'unique'       => false
        ),
        array(
            'name'         => 'lang:payment:fields:toReload',
            'slug'         => 'toReload',
            'namespace'    => 'payment',
            'type'         => 'decimal',
            'extra'        => array( 'decimal_places' => 2 ),
            'assign'       => 'payment',
            'title_column' => false,
            'required'     => true,
            'unique'       => false
        ),
        array(
            'name'         => 'lang:payment:fields:amt',
            'slug'         => 'amt',
            'namespace'    => 'payment',
            'type'         => 'decimal',
            'extra'        => array( 'decimal_places' => 2 ),
            'assign'       => 'payment',
            'title_column' => false,
            'required'     => true,
            'unique'       => false
        ),
        array(
            'name'         => 'lang:payment:fields:feeAmt',
            'slug'         => 'feeAmt',
            'namespace'    => 'payment',
            'type'         => 'decimal',
            'extra'        => array( 'decimal_places' => 2 ),
            'assign'       => 'payment',
            'title_column' => false,
            'required'     => true,
            'unique'       => false
        ),
        array(
            'name'         => 'lang:payment:fields:currencyCode',
            'slug'         => 'currencyCode',
            'namespace'    => 'payment',
            'type'         => 'text',
            'assign'       => 'payment',
            'title_column' => false,
            'required'     => true,
            'unique'       => false
        ),
        array(
            'name'         => 'lang:payment:fields:paymentStatus',
            'slug'         => 'paymentStatus',
            'namespace'    => 'payment',
            'type'         => 'text',
            'assign'       => 'payment',
            'title_column' => false,
            'required'     => true,
            'unique'       => false
        ),
        array(
            'name'         => 'lang:payment:fields:pendingReason',
            'slug'         => 'pendingReason',
            'namespace'    => 'payment',
            'type'         => 'text',
            'assign'       => 'payment',
            'title_column' => false,
            'required'     => false,
            'unique'       => false
        )
    ) );

    $this->db->insert_batch( 'settings',
        array(
            array(
                'slug'        => 'pay-sbx',
                'title'       => 'Activar modo Sandbox?',
                'description' => 'Establece si se usara el modo sbx para pruebas',
                'type'        => 'select',
                'value'       => 1,
                'options'     => '0=No|1=Sí',
                'is_required' => 1,
                'is_gui'      => 1,
                'default'     => 1,
                'module'      => 'payment',
                'order'       => 829
            ),
            array(
                'slug'        => 'paypalFee',
                'title'       => 'Fee PayPal',
                'description' => 'Fee de PayPal',
                'type'        => 'text',
                'value'       => '',
                'options'     => '',
                'is_required' => 1,
                'is_gui'      => 1,
                'default'     => 1,
                'module'      => 'payment',
                'order'       => 828
            ),
            array(
                'slug'        => 'paypalDiscount',
                'title'       => 'Descuento PayPal',
                'description' => 'Descuento de PayPal',
                'type'        => 'text',
                'value'       => '',
                'options'     => '',
                'is_required' => 1,
                'is_gui'      => 1,
                'default'     => 1,
                'module'      => 'payment',
                'order'       => 827
            ),
            array(
                'slug'        => 'pay-application-id-sbx',
                'title'       => 'PayPal Sandbox App ID (*)',
                'description' => 'PayPal Application ID (The application is only required with Adaptive Payments applications. You obtain your application ID but submitting it for approval within your developer account at http://developer.paypal.com. We are using shorthand if/else statements here to set both Sandbox and Production values. Your sbx values go on the left and your live values go on the right. The sbx value included here is a global value provided for developrs to use in the PayPal sbx.)',
                'type'        => 'text',
                'value'       => '',
                'is_required' => 1,
                'is_gui'      => 1,
                'default'     => '',
                'options'     => '',
                'module'      => 'payment',
                'order'       => 826
            ),
            array(
                'slug'        => 'pay-application-id-live',
                'title'       => 'PayPal Live App ID',
                'description' => 'PayPal Application ID (The application is only required with Adaptive Payments applications. You obtain your application ID but submitting it for approval within your developer account at http://developer.paypal.com. We are using shorthand if/else statements here to set both Sandbox and Production values. Your sbx values go on the left and your live values go on the right. The sbx value included here is a global value provided for developrs to use in the PayPal sbx.)',
                'type'        => 'text',
                'value'       => '',
                'is_required' => 0,
                'is_gui'      => 1,
                'default'     => '',
                'options'     => '',
                'module'      => 'payment',
                'order'       => 815
            ),
            array(
                'slug'        => 'pay-developer-account',
                'title'       => 'PayPal Developer Account Email Address (*)',
                'description' => 'This is the email address that you use to sign in to http://developer.paypal.com',
                'type'        => 'text',
                'value'       => '',
                'is_required' => 1,
                'is_gui'      => 1,
                'default'     => '',
                'options'     => '',
                'module'      => 'payment',
                'order'       => 825
            ),
            array(
                'slug'        => 'pay-api_username-sbx',
                'title'       => 'PayPal Username API Credentials (Sandbox) (*)',
                'description' => 'These are your PayPal API credentials for working with the PayPal gateway directly. These are used any time you are using the parent PayPal class within the library. You may obtain these credentials by logging into the following with your PayPal account: https://www.paypal.com/us/cgi-bin/webscr?cmd=_login-api-run',
                'type'        => 'text',
                'value'       => '',
                'is_required' => 1,
                'is_gui'      => 1,
                'default'     => '',
                'options'     => '',
                'module'      => 'payment',
                'order'       => 824
            ),
            array(
                'slug'        => 'pay-api_username-live',
                'title'       => 'PayPal Username API Credentials (Live)',
                'description' => 'These are your PayPal API credentials for working with the PayPal gateway directly. These are used any time you are using the parent PayPal class within the library. You may obtain these credentials by logging into the following with your PayPal account: https://www.paypal.com/us/cgi-bin/webscr?cmd=_login-api-run',
                'type'        => 'text',
                'value'       => '',
                'is_required' => 0,
                'is_gui'      => 1,
                'default'     => '',
                'options'     => '',
                'module'      => 'payment',
                'order'       => 814
            ),
            array(
                'slug'        => 'pay-api_password-sbx',
                'title'       => 'PayPal Password API Credentials (Sandbox) (*)',
                'description' => 'These are your PayPal API credentials for working with the PayPal gateway directly. These are used any time you are using the parent PayPal class within the library. You may obtain these credentials by logging into the following with your PayPal account: https://www.paypal.com/us/cgi-bin/webscr?cmd=_login-api-run',
                'type'        => 'text',
                'value'       => '',
                'is_required' => 1,
                'is_gui'      => 1,
                'default'     => '',
                'options'     => '',
                'module'      => 'payment',
                'order'       => 823
            ),
            array(
                'slug'        => 'pay-api_password-live',
                'title'       => 'PayPal Password API Credentials (Live)',
                'description' => 'These are your PayPal API credentials for working with the PayPal gateway directly. These are used any time you are using the parent PayPal class within the library. You may obtain these credentials by logging into the following with your PayPal account: https://www.paypal.com/us/cgi-bin/webscr?cmd=_login-api-run',
                'type'        => 'text',
                'value'       => '',
                'is_required' => 0,
                'is_gui'      => 1,
                'default'     => '',
                'options'     => '',
                'module'      => 'payment',
                'order'       => 813
            ),
            array(
                'slug'        => 'pay-api_signature-sbx',
                'title'       => 'PayPal Signature API Credentials (Sandbox) (*)',
                'description' => 'These are your PayPal API credentials for working with the PayPal gateway directly. These are used any time you are using the parent PayPal class within the library. You may obtain these credentials by logging into the following with your PayPal account: https://www.paypal.com/us/cgi-bin/webscr?cmd=_login-api-run',
                'type'        => 'text',
                'value'       => '',
                'is_required' => 1,
                'is_gui'      => 1,
                'default'     => '',
                'options'     => '',
                'module'      => 'payment',
                'order'       => 822
            ),
            array(
                'slug'        => 'pay-api_signature-live',
                'title'       => 'PayPal Signature API Credentials (Live)',
                'description' => 'These are your PayPal API credentials for working with the PayPal gateway directly. These are used any time you are using the parent PayPal class within the library. You may obtain these credentials by logging into the following with your PayPal account: https://www.paypal.com/us/cgi-bin/webscr?cmd=_login-api-run',
                'type'        => 'text',
                'value'       => '',
                'is_required' => 0,
                'is_gui'      => 1,
                'default'     => '',
                'options'     => '',
                'module'      => 'payment',
                'order'       => 812
            ),
            array(
                'slug'        => 'pay-rest_client_id-sbx',
                'title'       => 'PayPal REST API Username Credentials (Sandbox) (*)',
                'description' => 'These are the API credentials used for the PayPal REST API. These are used any time you are working with the REST API child class.',
                'type'        => 'text',
                'value'       => '',
                'is_required' => 1,
                'is_gui'      => 1,
                'default'     => '',
                'options'     => '',
                'module'      => 'payment',
                'order'       => 819
            ),
            array(
                'slug'        => 'pay-rest_client_id-live',
                'title'       => 'PayPal REST API Username Credentials (Live)',
                'description' => 'These are the API credentials used for the PayPal REST API. These are used any time you are working with the REST API child class.',
                'type'        => 'text',
                'value'       => '',
                'is_required' => 0,
                'is_gui'      => 1,
                'default'     => '',
                'options'     => '',
                'module'      => 'payment',
                'order'       => 807
            ),
            array(
                'slug'        => 'pay-rest_client_secret-sbx',
                'title'       => 'PayPal REST API Secret Credentials (Sandbox) (*)',
                'description' => 'These are the API credentials used for the PayPal REST API. These are used any time you are working with the REST API child class.',
                'type'        => 'text',
                'value'       => '',
                'is_required' => 1,
                'is_gui'      => 1,
                'default'     => '',
                'options'     => '',
                'module'      => 'payment',
                'order'       => 818
            ),
            array(
                'slug'        => 'pay-rest_client_secret-live',
                'title'       => 'PayPal REST API Secret Credentials (Live)',
                'description' => 'These are the API credentials used for the PayPal REST API. These are used any time you are working with the REST API child class.',
                'type'        => 'text',
                'value'       => '',
                'is_required' => 0,
                'is_gui'      => 1,
                'default'     => '',
                'options'     => '',
                'module'      => 'payment',
                'order'       => 806
            )
        ) );

    return true;
}

public function uninstall() {
    $fieldsToDelete = array(
        'paypalFee',
        'paypalDiscount',
        'pay-sbx',
        'pay-application-id-sbx',
        'pay-application-id-live',
        'pay-developer-account',
        'pay-api_username-sbx',
        'pay-api_username-live',
        'pay-api_password-sbx',
        'pay-api_password-live',
        'pay-api_signature-sbx',
        'pay-api_signature-live',
        'pay-rest_client_id-sbx',
        'pay-rest_client_id-live',
        'pay-rest_client_secret-sbx',
        'pay-rest_client_secret-live'
    );

    $this->db->where_in( 'slug', $fieldsToDelete );
    $this->db->delete( 'settings' );

    $dataFields = array(
        'transactionID',
        'orderTime',
        'toReload',
        'amt',
        'feeAmt',
        'currencyCode',
        'paymentStatus',
        'pendingReason'
    );

    $this->db->where_in( 'field_slug', $dataFields );
    $this->db->delete( 'data_fields' );

    $this->load->driver( 'Streams' );
    $this->streams->utilities->remove_namespace( 'payment' );
    if ( $this->db->table_exists( 'data_streams' ) ) {
        $this->db->where( 'stream_namespace', 'payment' )->delete( 'data_streams' );
    }

    $this->dbforge->drop_table( 'payment' );

    return true;
}

模块,显然 安装和卸载了,但我注意到这里缺少的东西,这就是我正在运行的问题,如果我知道了流的工作原理那么

  • 安装模块后,data_streams表上会出现一个新行,对吧?在我的情况下没有创建,为什么?我错过了什么?与卸载模块时相反,对吧?
  • 安装模块后,应该将某种条目添加到data_field_assignments对吗?就我而言,在我没有发生这种情况之前,为什么呢?我错过了什么吗?

有人可以给我一些帮助或建议吗?

PS:所有年底的快乐结束

2 个答案:

答案 0 :(得分:2)

这是一个关于如何使用流创建模块的简单样板:

假设名为my_module

的模块
public function install()
{
    //Create your stream
    if ( ! $this->streams->streams->add_stream(lang('streams:name'), 'my_module', 'my_module', '', null))
    {
        //Something went wrong so uninstall
        $this->uninstall();

        return false;
    }

    //Now we have the streams so create the fields
    $fields = array(
        array(
            'name'         => lang('my_module:fields:name'),
            'slug'         => 'my_fields_slug',
            'namespace'    => 'my_module',
            'type'         => 'text',
            'extra'        => array('max_length' => 100),
            'instructions' => lang('my_module:fields:instr:name'),
            'assign'       => 'my_module',
            'title_column' => true,
            'required'     => true,
            'unique'       => true
        ),
        ....
        ....
    );

   // Add fields to the stream
   $this->streams->fields->add_fields($fields);

   return true;
}

public function uninstall()
{
    //remove stream
    $this->streams->utilities->remove_namespace('my_module');

    //Drop table, strems do not do that
    $this->dbforge->drop_table('my_module');

    return true;
}

看一下这个例子:https://github.com/pyrocms/streams-enabled-module-sample

答案 1 :(得分:1)

你有一些文档需要阅读。

不要创建流表。不要丢弃它使用Streams Utility来销毁命名空间:http://docs.pyrocms.com/2.2/manual/developers/tools/streams-api/utilities-driver#remove_namespace(namespace_slug)。这将拆除该命名空间中的字段和分配。正确拆除一切。

仅使用流驱动程序添加流:http://docs.pyrocms.com/2.2/manual/developers/tools/streams-api/streams-driver#add_stream。这将创建表并自动添加data_streams记录。但如果表存在,则返回false,因为它假定Stream已存在。

添加字段时,需要使用字段驱动程序将它们分配到流:http://docs.pyrocms.com/2.2/manual/developers/tools/streams-api/fields-driver#assign_field(namespace,stream_slug,field_slug,assign_data:array)。这将自动创建列并为字段运行赋值挂钩。