【问题标题】:Display drupal node edit preview title instead of just "Preview"显示 drupal 节点编辑预览标题,而不仅仅是“预览”
【发布时间】:2018-04-05 23:42:05
【问题描述】:

如何更改要显示的节点预览标题而不仅仅是“预览”?

【问题讨论】:

    标签: drupal drupal-7


    【解决方案1】:

    这是解决自定义模块中问题的一种方法

    /**
     * implements hook_form_BASE_FORM_ID_alter
     * the form id that will build the node preview is page_node_form
     * @param $form
     * @param $form_state
     */
    function yourmodulename_form_page_node_form_alter( $form, $form_state ){
        if( !empty( $form_state['node']->in_preview ) ){
            // security hint: do not pass the PASS_THROUGH param to the drupal_set_title
            // because the node title may contain some xss. Without this parameter the
            // drupal_set_title will check for xss and remove them if present
            drupal_set_title(t('Preview') . ' ' . $form['#node']->title );
        }
    }
    

    【讨论】:

    • 感谢@lastYorsh 和重新 Pass_THROUGH(在核心 :D 中就像这样),我试过了,但它还没有改变标题。我什至使用了function nodepreviewtitle_form_page_node_form_alter( $form, $form_state ){ dpm($form_state);,但我没有用 devel 打印出变量,因此我担心它由于某种原因没有被触发。
    • 我在function node_preview($node) {找到了标题定义(在/node/node.pages.inc)我们需要调整函数名/钩子才能正确触发吗?如何确定我需要在“_form_alter”之前使用“_form_page_node”?
    • 你在添加yourmodulename_form_page_node_form_alter函数后是否清空了drupal缓存?
    • 是的,缓存已清除。不确定它是否有帮助,但使用自定义模块显示 dsm($form_id) 显示两个:faq_node_form 和 search_form。我想将此应用于所有类型的内容,而不仅仅是 faq_node :) 我可以看到“op”值在该节点中包含“Preview”。
    • yourmodulename_form_page_node_form_alter 函数将对 ID 为 page_node_form 的表单做出反应。当您从以下 url 的管理页面编辑节点时,drupal 会创建此表单: ?q=node//edit 在此页面的底部有“预览”按钮。也许我误解了你需要什么:)
    【解决方案2】:

    这里如何破解核心来修改标题(快速简单的方法),但更好的是通过自定义模块覆盖(也许其他人可以发布)。

    在/modules/node/node.pages.inc 中添加$node->titledrupal_set_title(t('Preview'), PASS_THROUGH);

    像这样:

    // Display a preview of the node.
        if (!form_get_errors()) {
          $cloned_node->in_preview = TRUE;
          $output = theme('node_preview', array('node' => $cloned_node));
          unset($cloned_node->in_preview);
        }
        drupal_set_title(t('Preview: '.$node->title), PASS_THROUGH);
    

    【讨论】:

    • 破解 Drupal 核心总是一个坏主意,其他答案还可以。
    • @EricLavault 我知道,这就是为什么我说更好的是自定义模块,谢谢 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多