ستي
اضافه کردن فيلد با استفاده از پلاگين ExtraFields
هر يک از اين دو روش معايب و مزاياي مخصوص به خوشون را دارند. در پايان به معايب و مزاياي هر يک اشاره کرده ام.
چگونه کار مي کند؟
همان طور که مي دانيد يا نمي دانيد تمام اطلاعاتي که به مويبل تايپ مي دهيم در ديتابيس ذخيره مي شود. در نتيجه بايد براي فيلد هاي جديدي که در ام تي مي خواهيم ايجاد کنيم برابر آن در ديتابيس فيلد جديدي ايجاد کنيم و سپس براي هر فيلد يک تگ در ام تي ايجاد کنيم.
روش اول: ايجاد فيلد ها به صورت دستي
چند کلمه قبل از شروع:
1) پيشاپيش يک نسخه ي پشتيبان از داده ها بگيريد
2) من هيچ گونه مسئوليتي در قبال مشکلات احتمالي تقبل نمي کنم. (آخه خودتون که مي دونيد. ما حق دستکاري در اين کد ها را نداريم و اين يک جور hack محسوب ميشه)
3) اين عميليات روي MT3.17 به خوبي جواب داد در مورد نسخه هاي ديگه اطمينان ندارم. (دوستان اگه روي ورژن هاي ديگه امتحان کردند حتما تو کامنت ها بگويند رو چه نسخه اي جواب داد)
4) عوض کردن فايل هاي ام تي باعث مي شود کار شما را در هنگام به روز رساني نسخه ي قديمي ام تي دشوار کند.
5) در آينده در صورتي که بخواهيد از اطلاعات خود بک آپ بگيريد در هنگام Export با مشکل مواجه مي شويد. البته اين مشکل قابل حل هست ولي من زياد وارد نيستم.
مرحله ي اول: اضافه کردن فيلد جديدي در DataBase
توسط phpMyAdmin وارد database مربوط به مويبل تايپ شويد. سپس يک فيلد جديد در تيبل mt_entry ايجاد کنيد. اسم فيلد را entry_user1 بگذاريد يا هر اسم دلخواه ديگه و حتما بايد اولش با “entry_” شروع شود.
مرحله ي دوم: تغيير در Lib/MT/Entry.pm
در اين فايل شما چنين قسمتي را پيدا مي کنيد:
کد:
columns => [
'id', 'blog_id', 'status', 'author_id', 'allow_comments',
'title', 'excerpt', 'text', 'text_more', 'convert_breaks',
'to_ping_urls', 'pinged_urls', 'allow_pings', 'keywords',
'tangent_cache',
فيلد جديد خود را بدون پيشوند (entry_) وارد کنيد. مانند زير:
مرحله ي سوم: اضافه کردن جعبه ي متني در Editor
فايل زير را پيدا کنيد:
سپس خط هاي زير را پيدا کنيد:
کد:
<TMPL_IF NAME=DISP_PREFS_SHOW_KEYWORDS>
<div class="field">
<label for="keywords"><MT_TRANS phrase="Keywords"></label> <a href="#" onclick="return openManual('entries', 'item_keywords')" class="help">?</a><br />
<textarea class="full-width" name="keywords" id="keywords" tabindex="6" rows="2"><TMPL_VAR NAME=KEYWORDS ESCAPE=HTML></textarea>
</TMPL_IF>
پس از خط هاي بالا خط هاي زير را وارد کنيد:
کد:
<div class="field">
<label for="user1"><MT_TRANS phrase="user1"></label> <br />
<textarea class="full-width" name="user1" id="user1" tabindex="6" rows="2"><TMPL_VAR NAME=USER1 ESCAPE=HTML></textarea>
</div>
مرحله ي چهارم: اضافه کردن تگ جديد
فايل زير را پيدا کنيد:
کد:
lib/MT/Template/Context.pm
حدود سطر 70 به بعد خط هايي را مي بينيد که با متن زير شروع مي شوند:
کد:
$ctx->register_handler...
خط زير را اضافه کنيد:
کد:
$ctx->register_handler(EntryUser1 => \&_hdlr_entry_user1);
اين خط به MT فرمان مي دهد تگي به نام “MTEntryUser1” ايجاد کند. متن قرمز رنگ نام تگ شما مي باشد يک نام دلخواه انتخاب کنيد.
کمي پايين بيايد تا از قسمت خارج شود حدود خط هاي 255 خطوط زير را وارد کنيد:
کد:
sub _hdlr_entry_user1 {
my $e = $_[0]->stash('entry')
or return $_[0]->_no_entry_error('MTEntryUser1');
defined $e->user1 ? $e->user1 : ''; }
مرحله ي پنجم: تغيير در قالب جست و جوي MT
در صورتي که شخصي کلمه اي را در MT جست و جو کند MT فقط در تگ هاي استاندارد خود به جست و جو مي پردازد. براي رفع اين مشکل فايل زير را پيدا کنيد:
حدود سطر 440 خطوط زير را پيدا کنيد:
کد:
@text_elements = ($entry->title, $entry->text, $entry->text_more,
$entry->keywords,);
خطوط بالا را به شکل زير تغيير دهيد:
کد:
@text_elements = ($entry->title, $entry->text, $entry->text_more,
$entry->keywords, $entry->english_title);
حالا شما تگ جديدي به نام زير پيدا کرده ايد: