0

これは私の最初のモジュールです。1 週間前から、モジュールを正常にインストールしようとしています。

私はすべての行を通過しました。スキーマもインストールされ、エントリはシステム テーブルに作成されます。ただし、モジュールを有効にした後でも、システム テーブルからエントリを削除するまで、500 内部サーバー エラーが表示されます。

私が間違っていることを教えてください。

注: sisattribute テーブルは drupal データベースに既に作成されています

私の .install ファイル

<?php

/**
* @file
*/

function sisinstitute_install() {
 drupal_install_schema('sisinstitute');
 variable_set('node_options_sisinstitute', array('status'));

 $attributes = array();

 $attributes['Country'] = array(
  'US' => 'United States of America',
  'AD' => 'Andorra',
  'AE' => 'United Arab Emirates',
  'AF' => 'Afghanistan',
 );

$s = "INSERT INTO {sisattribute} (domain, akey, avalue, weight) VALUES ('%s', '%s', '%s', %d)";
$prevdomain = '';
$weight = 0;
foreach ($attributes as $domain => $attribute) {
if ($domain != $prevdomain) $weight=0;
foreach ($attribute as $key => $value) {
  db_query($s, $domain, $key, $value, $weight);
  $weight++;
}
$prevdomain = $domain;
}
}

function sisinstitute_disable() {
drupal_set_message(t('Please note that they will now have reduced functionality, and will not be protected by previous access controls.'), 'warning');
}

function sisinstitute_uninstall() {
 drupal_uninstall_schema('sisinstitute');

db_query($s = "DELETE FROM {sisattribute} WHERE domain IN ('Country')");
}

function sisinstitute_schema() {
  $schema['sisinstitute'] = array(
   'fields'        => array(
    'vid'         => array('type' => 'int', 'not null' => TRUE, 'default' => 0),
    'nid'         => array('type' => 'int', 'not null' => TRUE, 'default' => 0),
    'country'     => array('type' => 'varchar', 'length' => 100),
    'www'         => array('type' => 'varchar', 'length' => 100),
    'phone'       => array('type' => 'varchar', 'length' => 100),
    'email'       => array('type' => 'varchar', 'length' => 50),
    'provstate'   => array('type' => 'varchar', 'length' => 50),
    'zip'         => array('type' => 'varchar', 'length' => 10),
    'city'        => array('type' => 'varchar', 'length' => 100),
    'address'     => array('type' => 'varchar', 'length' => 100),
    'orglanguage' => array('type' => 'varchar', 'length' => 100),
    'isactive'    => array('type' => 'int', 'default' => 1),

  ),
  'primary key' => array('vid'),
  'indexes' => array(
  'nid'     => array('nid')
  ),
  );

  return $schema; 
  }

そして私の .module ファイル:

<?php
// $Id$

/**
*@File
*Module for Institution support in SIS package
*/


/**
*hook_help()
*/


/**
*hook_menu()
*/




/**
*hook_perm()
*/
function sisinstitute_perm() {
  return array('access institute', 'create institute', 'edit institute', 'delete institute', 'view belonged institute', 'view all institutes');

}






/**
*hook_access()
*/
function sisinstitute_access($op, $node. $account=NULL) {
 if (empty($account)) {
  global $user;
  $account = $user;
 }

 if (is_numeric($node)) $node = node_load($node);

 if (!isset($account->sisinstitute_nid) && module_exists('sisstudent')) {
  _sisstudent_load($account);
 }

 if (!isset($account->sisinstitute_nid) && module_exists('sisstaff')) {
  _sisstaff_load($account);
 }

 switch($op) {
  case 'create': return user_access('create institute', $account);
  case 'update': return user_access('edit institute', $account);
  case 'delete': return user_access('delete institute', $account);
  case 'view'  : {
                  if (user_access('view all institutes', $account))
                    return TRUE;
                  elseif (user_access('view belonged institute', $account) && $account->sisinstitute_nid == $node->nid)
                    return TRUE;
                  else return FALSE;
                 }
 }
}




/**
*hook_node_info()
*/

function sisinstitute_node_info() {
 return array(
  'sisinstitute' => array(
  'name' => t('Institute'),
  'module' => 'sisinstitute',
  'description' => t("Institute for SIS"),
  'title_label' => t("Name"),
  'body_label' => t("Note"),
)
);

}



/**
*hook_form()
*/
function sisinstitute_form(&$node) {
 $type = node_get_types('type', $node);

 //$form['#attributes']['class'] = 'sismcomponent_node_form';

 $form['title'] = array(
  '#type' => 'textfield',
  '#title' => check_plain($type->title_label),
  '#required' => TRUE,
  '#default_value' => $node->title,
  // '#weight' => module_exists('content') ? content_extra_field_weight($node->type, 'title') : -18,
  );


$form['isactive'] = array(
 '#type' => 'checkbox',
 '#title' => t('Active'),
 '#default_value' => $node->isactive,
);

return $form;
}
4

1 に答える 1

0

うーん、了解しました:-)(8時間後)

関数sisinstitute_access($ op、$node。$ account = NULL){

$nodeの後にコンマの代わりにピリオドがあります

于 2012-05-31T06:18:13.223 に答える