これは私の最初のモジュールです。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;
}