it-swarm.asia

كيف يمكنك إعادة تسمية زر التعليق "حفظ"؟

هل يعرف أي شخص كيفية إعادة تسمية زر التعليق "حفظ"؟ أحاول تغييره إلى "نشر". أنا أستخدم Drupal 7 وموضوع Zen الفرعي.

8
Jasmine Ahmed

من أجل Drupal 7 ، تحتاج إلى إنشاء وحدة مخصصة تنفذ hook_form_FORM_ID_alter() باستخدام رمز مشابه للرمز التالي (استبدل "mymodule" بالاسم المختصر للوحدة النمطية جاري الكتابة):

function mymodule_form_comment_form_alter(&$form, &$form_state) {
  if (isset($form['actions']['submit'])) {
    $form['actions']['submit']['#value'] = t('Post');
  }
}

comment_form () يستخدم الكود التالي لتعريف أزرار النموذج:

  // Only show the save button if comment previews are optional or if we are
  // already previewing the submission.
  $form['actions'] = array('#type' => 'actions');
  $form['actions']['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Save'), 
    '#access' => ($comment->cid && user_access('administer comments')) || variable_get('comment_preview_' . $node->type, DRUPAL_OPTIONAL) != DRUPAL_REQUIRED || isset($form_state['comment_preview']), 
    '#weight' => 19,
  );
  $form['actions']['preview'] = array(
    '#type' => 'submit', 
    '#value' => t('Preview'), 
    '#access' => (variable_get('comment_preview_' . $node->type, DRUPAL_OPTIONAL) != DRUPAL_DISABLED), 
    '#weight' => 20, 
    '#submit' => array('comment_form_build_preview'),

ل Drupal 6 ، يجب أن يكون الرمز التالي:

function mymodule_form_comment_form_alter(&$form, &$form_state) {
  if (isset($form['submit'])) {
    $form['submit']['#value'] = t('Post');
  }
}

أضفت جزء if (isset($form['submit'])) {} لأنه في Drupal 6، comment_form() يحدد أزرار النموذج باستخدام الكود التالي ، و قد لا يكون الزر الذي تحاول تغييره موجودًا في النموذج.

  // Only show save button if preview is optional or if we are in preview mode.
  // We show the save button in preview mode even if there are form errors so that
  // optional form elements (e.g., captcha) can be updated in preview mode.
  if (!form_get_errors() && ((variable_get('comment_preview_' . $node->type, COMMENT_PREVIEW_REQUIRED) == COMMENT_PREVIEW_OPTIONAL) || ($op == t('Preview')) || ($op == t('Save')))) {
    $form['submit'] = array(
      '#type' => 'submit',
      '#value' => t('Save'),
      '#weight' => 19,
    );
  }

  $form['preview'] = array(
    '#type' => 'button',
    '#value' => t('Preview'),
    '#weight' => 20,
  );
19
kiamlaluno

ل Drupal 6 ، الإجابات أعلاه تشير إلى استخدام hook_form_alter سوف لا العمل ، على الرغم من أنك تعتقد أنها ستعمل. عادةً ما تفعل ذلك مثل:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if ('comment_form' == $form_id) {
    $form['submit']['#value'] = t('Post');
  }
}

بينما يبدو أن هذا يعمل ، وسترى زرًا يحتوي على نص "Post" ، في الواقع ستجد مشكلتين:

  1. إذا تم إعداد موقعك لفرض معاينة التعليقات قبل الحفظ ، فستجد أن زر "نشر" تمت إضافته إلى نموذج التعليق الأولي ، حيث يجب أن يكون هناك زر "معاينة" فقط. ومع ذلك ، يمكن إصلاح ذلك بسهولة.
  2. لن يقوم زر "النشر" الجديد الخاص بك بإرسال النموذج بالفعل - تبحث وحدة التعليق D6 عن قيمة الزر للقيام بمنطقه ، وإذا قمت بتغييره إلى شيء آخر غير "حفظ" ، فهذا يكسر منطق الإرسال.

لإجراء هذا العمل فعليًا ، ستحتاج إلى إخفاء الزر واستخدام معالج إرسال نموذج مخصص. إذا فعلت ذلك فسأعود هنا وأرسل كود العمل.

2
Andy Laken

أُفضل استخدام hook_form_alter مقابل تجاوزات السلسلة.

function YOURMODULENAME_form_comment_form_alter(&$form, &$form_state) {
  $form['buttons']['submit']['#value'] = 'Submit Comment'; //Your text for the submit button goes here.
};
2
user2014

لا حاجة لوحدة مخصصة أو استخدام وحدة تجاوز السلسلة. في settings.php ، حول السطر 416 ، قم بإلغاء التعليق وتعديل ما يلي باستخدام تجاوزاتك:

/**
String overrides:

To override specific strings on your site with or without enabling locale
module, add an entry to this list. This functionality allows you to change
 * a small number of your site's default English language interface strings.
 *
 * Remove the leading hash signs to enable.
 */
# $conf['locale_custom_strings_en'][''] = array(
#   'forum'      => 'Discussion board',
#   '@count min' => '@count minutes',
# );
1
user842

كما أندي لاكين مذكور أعلاه

... زر "النشر" الجديد لن يرسل النموذج بالفعل ...

كيف يمكن اصلاح هذا:

function MYMODULE_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id === 'comment_form') {
    // Rename submit button.
    $form['submit']['#value'] = t('Post');
    // Add new form validator.
    array_unshift($form['#validate'], 'MYMODULE_comment_form_validate');
  }
}

function MYMODULE_comment_form_validate(&$form, &$form_state) {
  // Restore native value.
  if ($form_state['values']['op'] === t('Post')) {
    $form['submit']['#value'] = t('Save');
    $form_state['values']['op'] = t('Save');
  }
}

هذا هو! تبدأ وظيفة التحقق أولاً ، وستعالج وحدة التعليقات النموذج بقيمة إرسال أصلية.

1
Jekis