سؤال

بشكل افتراضي ، تحتوي روابط العقدة في صفحة المدونة blog_usernames_blog (مدونة المشرف) ، comment_add (أضف تعليقًا جديدًا) و node_read_more (اقرأ أكثر).

أحتاج إلى التخلص من أول 2 منهم ، وتغيير النص في node_read_more.

لقد قمت بإنشاء وظيفة تدعى $themenamepreprocess_node في template.php في موضوعي ، مع هذا المحتوى:

function mytheme_preprocess_node(&$vars, $hook){
    $node = $vars['node'];
    //blog node, not in full node page
    if($vars['node']->type == 'blog' AND !$vars['page']){
        $vars['node']->links['node_read_more']['title'] = t('My custom read more here');
        unset($vars['node']->links['blog_usernames_blog']);
        unset($vars['node']->links['comment_add']);
    }
    //debug:
    echo "<!-- DEBUG\n";
    print_r($vars['node']->links);
    echo "\n-->";
}

لكنه لا يعمل ؛ عندما أقوم بطباعة $vars['node']->links في نهاية الوظائف ، صفيف الروابط هو بالضبط كما أريد ؛ ولكن عندما يتم تقديم الصفحة ، يتم عرض الروابط الافتراضية القديمة.

لماذا ا؟ كيف يمكنني عرض روابط العقدة فقط لبعض نوع المحتوى وفقط في صفحة قائمة العقدة ، مع وظائف الرسائل؟

ملاحظة: لقد قمت بمسح ذاكرة التخزين المؤقت وسجل السمة قبل كل تجربة ؛)

هل كانت مفيدة؟

المحلول

أولاً: يجب أن تختبر على $ hook ، وإلا سيتم استدعاء وظيفة المعالجة هذه في كل مكان. سيؤدي إلى أسفل موقعك ، حتى لو قمت بتشغيل موقع صغير على خادم كبير.

ثانياً: إذا كان print_r ، يطبع الروابط الصحيحة ، فمن المؤكد أن الكود / run ، لا داعي للقلق بشأن سجل السمة.

الآن ، ربما تنظر إلى المظهر الخاطئ. Theme_links هو ما تريده. http://api.drupal.org/api/function/theme_links/5

function mytheme_preprocess_links(&$vars, $hook){
    if ($hook == 'links') {
      var_dump($vars);
      unset($vars['links']['blog_usernames_blog']);
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top