দ্রুপাল 7
ড্রুপাল 7 এ একটি পাঠ্য ক্ষেত্র তৈরি করার সময় আপনার অবশ্যই আপনার ডেটার জন্য সর্বাধিক দৈর্ঘ্য বেছে নিতে হবে। এই ক্ষেত্রের জন্য আপনি যে কোনও ডেটা তৈরি করার সাথে সাথে সর্বাধিক দৈর্ঘ্য দ্রুপাল ক্ষেত্র সেটিংসে অপরিবর্তনীয় হয়ে যায়।
এটি বোধগম্য যে এটি সর্বোচ্চ দৈর্ঘ্য হ্রাস করার জন্য অক্ষম হবে কারণ এর ফলে ডেটা হারাতে পারে তবে কোনও ক্ষেত্রের সর্বোচ্চ দৈর্ঘ্য বাড়ানো সম্ভব। ড্রুপাল 7 পাঠ্য মডিউল কোডটিতে একটি টুডো দেখায় যে এটি উদ্দেশ্যযুক্ত কিন্তু কখনই সম্পন্ন হয়নি।
3 টি জিনিস যা হওয়া দরকার:
- ক্ষেত্র_ডেটা_ {ক্ষেত্রের নাম} সারণীতে মান কলামের VARCHAR দৈর্ঘ্য পরিবর্তন করুন
- ক্ষেত্র_দর্শন_ {ক্ষেত্রের নাম} সারণীতে মান কলামের VARCHAR দৈর্ঘ্য পরিবর্তন করুন
- নতুন সর্বোচ্চ দৈর্ঘ্যের সেটিংটি প্রতিফলিত করতে ক্ষেত্রটির কনফিগারেশন আপডেট করুন নিম্নলিখিত ফাংশনটি এই সমস্ত 3 টি পদক্ষেপটি সম্পাদন করে এবং ক্ষেত্রের নাম এবং নতুন সর্বাধিক দৈর্ঘ্য সহ 2 টি সহজ পরামিতি নেয়।
/**
* Helper function to change the max length of a text field.
*/
function MYMODULE_change_text_field_max_length($field_name, $new_length) {
$field_table = 'field_data_' . $field_name;
$field_revision_table = 'field_revision_' . $field_name;
$field_column = $field_name . '_value';
// Alter value field length in fields table.
db_query("UPDATE `{$field_table}` SET `{$field_column}`=SUBSTR(`{$field_column}`, 0, {$new_length})");
db_query("ALTER TABLE `{$field_table}` CHANGE `{$field_column}` `{$field_column}` VARCHAR( {$new_length} )");
// Alter value field length in fields revision table.
db_query("UPDATE `{$field_revision_table}` SET `{$field_column}`=SUBSTR(`{$field_column}`, 0, {$new_length})");
db_query("ALTER TABLE `{$field_revision_table}` CHANGE `{$field_column}` `{$field_column}` VARCHAR( {$new_length} )");
// Update field config with new max length.
$result = db_query("SELECT CAST(`data` AS CHAR(10000) CHARACTER SET utf8) FROM `field_config` WHERE field_name = '{$field_name}'");
$config = $result->fetchField();
$config_array = unserialize($config);
$config_array['settings']['max_length'] = $new_length;
$config = serialize($config_array);
db_update('field_config')
->fields(array('data' => $config))
->condition('field_name', $field_name)
->execute();
}
আপনার কাস্টম ইনস্টল ফাইলটিতে এই ফাংশনটি উপলব্ধ হয়ে গেলে আপনি একটি নতুন ডাটাবেস আপডেট ফাংশন তৈরি করতে পারেন যা আপনার প্রয়োজনীয় পরিবর্তনগুলি করতে এই নতুন ফাংশনটি ব্যবহার করে।
/**
* Change max_length of Name field
*/
function mymodule_update_7002() {
MYMODULE_change_text_field_max_length('field_name', 50);
}
সূত্র:
http://nathan.rambeck.org/blog/42-modify-drupal-7-text-field-maximum-leth
দ্রুপাল ৮
@ ক্রিসটফার প্রস্তাবিত একই ফাংশনের সংস্করণটি এখানে :
/**
* Utility to change the max length of a text field.
*
* @param string $field_name
* Field name.
* @param int $new_length
* Field length in characters.
*
* @throws \DrupalUpdateException
*/
function MYMODULE_change_text_field_max_length($field_name, $new_length) {
// The transaction opens here.
$txn = db_transaction();
try {
// Update field content tables with new max length.
foreach (['field_data_', 'field_revision_'] as $prefix) {
db_query('
ALTER TABLE {' . $prefix . $field_name . '}
MODIFY ' . $field_name . '_value VARCHAR( ' . $new_length . ' )
');
}
// Update field config record with new max length.
$result = db_query("
SELECT CAST(data AS CHAR(10000) CHARACTER SET utf8)
FROM {field_config}
WHERE field_name = :field_name
", [':field_name' => $field_name]
);
$config = $result->fetchField();
if ($config) {
$config_array = unserialize($config);
$config_array['settings']['max_length'] = $new_length;
$new_config = serialize($config_array);
db_update('field_config')
->fields(['data' => $new_config])
->condition('field_name', $field_name)
->execute();
}
}
catch (Exception $e) {
// Something went wrong somewhere, so roll back now.
$txn->rollback();
// Allow update to be re-run when errors are fixed.
throw new \DrupalUpdateException(
"Failed to change $field_name field max length: " . $e->getMessage(),
$e->getCode(), $e
);
}
}