it-swarm.asia

كيفية عرض حقل قبل عنوان العقدة؟

أنا أتطلع إلى تقديم حقل معين قبل عنوان العقدة عند عرض الجملة المحفزة في D7.

على نحو فعال أريد الانتقال من هذا إلى هذا .

لقد بحثت في تحديث node.tpl.php ولكني لاحظت أنه يفصل $title من عند $content لذلك أنا غير متأكد من كيفية التعامل مع هذا. بعد بعض عمليات البحث ، وجدت أن الأشخاص قد اقترحوا استخدام CCK و ConTemplate وحدات للتغلب على هذا في Drupal-6 لكنني " يتساءل م إذا كان هناك حل أكثر دروبال -7.

أي اقتراحات؟

39
irishbuzz

هذا أمر بسيط حقًا مع Drupal 7.

مع render و hide أنت تعلم أن لديك إمكانية التحكم في وضع عنصر واحد في $content دون الحاجة إلى طباعة جميع العناصر بنفسك كما هو مطلوب في Drupal 6.

يبدو قالب العقدة المبسط كما يلي:

<div>
  <h2><?php print $title; ?></h2>
  <div class="content">
    <?php print render($content); ?>
  </div>
</div>

تعديل بسيط سيعالج احتياجاتك:

<div>
  <?php print render($content['field_name_of_image']); ?>
  <h2><?php print $title; ?></h2>
  <div class="content">
    <?php print render($content); ?>
  </div>
</div>

باستخدام render ، يمكنك إخراج عنصر. هذا أكثر ذكاءً من مجرد طباعة الأشياء ، حيث Drupal ما تم تقديمه ، لتجنب طباعة نفس الشيء مرتين في المكان. عند عرض الحقل فوق العنوان ، إزالة أيضًا لما يتم تقديمه عند $content يتم تقديمه.

51
googletorp

Display Suite رائع أيضًا.

تسمح لك Display Suite بالتحكم الكامل في كيفية عرض المحتوى الخاص بك باستخدام واجهة السحب والإفلات. رتب عقدك ، وجهات نظرك ، وتعليقاتك ، وبيانات المستخدم ، وما إلى ذلك بالطريقة التي تريدها دون الحاجة إلى العمل في طريقك عبر عشرات ملفات القوالب. تتوفر قائمة محددة مسبقًا بالتخطيطات (D7 فقط) لمزيد من السحب والإسقاط!

8
stevepurkiss

ألق نظرة على وحدة العنوان - http://drupal.org/project/title . قد تكون مفيدة لسيناريو الخاص بك. لقد قمت بتثبيته/تمكينه لسبب ما ، ربما يشبهك ، ويبدو أنه يمنح مرونة في كيفية وضع حقل العنوان.

لقد قمت بتعطيله منذ ذلك الحين (وأنا أستخدم Display Suite) ، لذلك قد يكون تذكري سطحيًا بعض الشيء.

7
Greta

هذا حل مخترق وأنا متأكد من أن شخصًا ما سيخرج بشيء أكثر أناقة ، ولكن في حال كنت عالقًا ، ولم يفعل أحد ...

يمكنك استخدام page.tpl.php لإزالة طباعة $title تمامًا ، وإضافة حقل مخصص جديد يسمى Title باسم الجهاز $ new_title أو شيء من هذا القبيل. ثم عند تحرير العقدة ، قم بإخفاء مربع العنوان الأصلي ، وفي العقدة حفظ استخدم الحقل المحسوب أو بعض php المخصص لنسخ $new_title إلى $title.

بعد كل ذلك ، اكتب بعض css لجعل $ new_title يبدو مثل عنوان الصفحة من قبل ، ويجب أن تكون قادرًا على وضع أي حقول بأي ترتيب تريده ، فقط عن طريق السحب والإفلات في شاشة إدارة الحقول. نظرًا لأنك قمت بنسخ أكثر من $new_title إلى $title ، فلا يزال عنوان الصفحة في شريط المستعرض يعمل ولا يجب أن يشتكي شيء من عناوين العقدة المفقودة.

كما قلت ، إنه اختراق - لكنه سيعمل. اسمحوا لي أن أعرف إذا كنت بحاجة إلى مزيد من المعلومات

4
Frederik

page.tpl.php (جارلاند)

...
      <div id="center"><div id="squeeze"><div class="right-corner"><div class="left-corner">
          <?php print $breadcrumb; ?>
          <?php if ($mission): print '<div id="mission">'. $mission .'</div>'; endif; ?>

          /*
           * Print custom block or var
           */
          <?php if ($custom_block): print '<div id="custom-block" class="clear-block">'. $custom_block .'</div>'; endif; ?>

          <?php if ($tabs): print '<div id="tabs-wrapper" class="clear-block">'; endif; ?>
          <?php if ($title): print '<h2'. ($tabs ? ' class="with-tabs"' : '') .'>'. $title .'</h2>'; endif; ?>
          <?php if ($tabs): print '<ul class="tabs primary">'. $tabs .'</ul></div>'; endif; ?>
          <?php if ($tabs2): print '<ul class="tabs secondary">'. $tabs2 .'</ul>'; endif; ?>
          <?php if ($show_messages && $messages): print $messages; endif; ?>
          <?php print $help; ?>
          <div class="clear-block">
            <?php print $content ?>
          </div>
          <?php print $feed_icons ?>
          <div id="footer"><?php print $footer_message . $footer ?></div>
      </div></div></div></div> <!-- /.left-corner, /.right-corner, /#squeeze, /#center -->
...

template.php

/**
 * Override or insert variables into the page template.
 */
function phptemplate_preprocess_page(&$variables) {
  $node = $variables['node'];
  if($node->type == MY_NODE_TYPE) {
    $variables['custom_block'] = 'bla bla bla';
  }
}
3
dobeerman

لا ينطبق هذا على سؤال الجملة المحفزة في المنشور الأصلي ، ولكن بالنسبة للأشخاص الذين يتعثرون عبر هذا ويريدون فقط تحقيق ذلك في العرض الكامل ، إليك خيار خالٍ من التعليمات البرمجية: عرض الحقل في كتلة (باستخدام طرق العرض ، على سبيل المثال) ووضع هذا الحظر فوق كتلة المحتوى الخاص بك ولكن في نفس المنطقة.

3
brad

أعتقد أنه يجب عليك استخدام وظائف ما قبل المعالجة في template.php

/**
 * Override or insert variables into the page template.
 */
function THEMENAME_process_page(&$variables) {
  // look for $variables['page_title'] if i remember
}

وكإضافي

/**
 * Override or insert variables into the node template.
 */
function THEMENAME_preprocess_node(&$variables) {
  //
}

تفريغ المتغيرات وتفعل أي شيء تريده. إضافة/إزالة/تحديث.

2
dobeerman

لقد قمت بحل هذا عن طريق حل لا يحتوي على تعليمات برمجية باستخدام Display Suite وميزة "المنطقة المراد حظرها". أحب هذا الحل أكثر لمرونته.

بشكل أساسي ، قم بتمكين جزء الإضافات "المنطقة المراد حظرها" ، وقم بتمكين عرض "محتوى النص الكامل" في Display Suite. (بافتراض أنك تريد عرض المحتوى فوق العنوان في عرض العقدة الكاملة ، بالمثل يمكنك استخدامه لأي وضع عرض آخر باستثناء افتراضي). الآن ، في جزء "إدارة العرض" من "محتوى النص الكامل" ، في أسفل الشاشة ، يجب أن تظهر علامة التبويب "حظر المناطق". أدخل اسم كتلة جديدة هناك ، واحفظ واسحب وأفلت الحقول المطلوبة لهذا الكتلة. أخيرًا ، انقل الكتلة التي تم إنشاؤها حديثًا في شاشة الكتل في مكان ما = أعلاه عنوان العقدة.

يمكنك مشاهدة الفيديو بنفس الطريقة هنا: http://www.youtube.com/watch؟v=y4wyjxyhbNA ، بالطبع تحتاج إلى وضع الكتلة فوق العنوان (وليس إلى الشريط الجانبي الأيسر) في نهايةالمطاف.

2
Mirsoft

لقوالب زين أدناه رمز يعمل بالنسبة لي.

<?php
// this goes in template.php
// check if node type page and then add to $vars array
// declaring $vars['foo'] gives you a $foo variable to use in page.tpl.php

function YOURTHEMENAME_preprocess_page(&$vars, $hook) {
    if (isset($vars['node'])) :
        if($vars['node']->type == 'page'):       
            $node = node_load($vars['node']->nid);
            $output = field_view_field('node', $node, 'field_image', array('label' => 'hidden'));       
            $vars['my_image_field'] = $output;               
        endif;
    endif;
}
?>

أخيرًا ، يمكنك بسهولة طباعة الحقل الخاص بك في page.tpl.php ؛

<?php
if ($my_image_field):
   print render($my_image_field);
endif;
?>
1
user991554

أعلم أنك كنت ستستخدم بالفعل بعض السمة لبناء وتحاول الآن إضافة الحقول في أعلى العنوان.

اقتراحاتي لجميع المطورين الذين يبنون السمة في Drupal 7 ستستخدم: موضوع أوميغا + سياق ووحدات دلتا. وهذا يعطي أساسًا قويًا جدًا لتخطيطك.

والمرونة في ترتيب المناطق والكتل والحقول.

1
AnAnD

يمكنك أن تفعل مع وحدة لوحات

0
houmem