it-swarm-vi.com

Làm thế nào để hiển thị một trường trước tiêu đề nút?

Tôi đang tìm cách kết xuất một trường nhất định trước tiêu đề của nút khi hiển thị một lời trêu ghẹo trong D7.

Thực tế, tôi muốn đi từ này đến này .

Tôi đã xem xét việc cập nhật node.tpl.php nhưng tôi nhận thấy rằng nó tách $title từ $content vì vậy tôi không chắc làm thế nào để tiếp cận điều này. Sau một số tìm kiếm, tôi thấy rằng mọi người đã đề xuất sử dụng CCK ConTemplate các mô-đun để khắc phục điều này trong Drupal-6 nhưng tôi ' Tôi tự hỏi nếu có một giải pháp Drupal-7 hơn.

Bất kỳ đề xuất?

39
irishbuzz

Điều này thực sự khá đơn giản với Drupal 7.

Với renderhide bạn biết có khả năng kiểm soát vị trí của một phần tử trong $content mà không cần phải in ra tất cả các mục mà bạn muốn là cần thiết trong Drupal 6.

Một mẫu nút được đơn giản hóa trông như thế này:

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

Một sửa đổi nhỏ sẽ xử lý nhu cầu của bạn:

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

Sử dụng render, bạn có thể xuất một phần tử. Điều này thông minh hơn đơn giản là in công cụ, vì Drupal sẽ theo dõi những gì đã được hiển thị, để tránh điều tương tự được in hai lần tại chỗ. Khi hiển thị trường phía trên tiêu đề bạn đang cũng loại bỏ những gì được hiển thị khi $content Được hiển thị.

51
googletorp

Display Suite cũng khá tuyệt.

Display Suite cho phép bạn kiểm soát hoàn toàn cách hiển thị nội dung của mình bằng giao diện kéo và thả. Sắp xếp các nút, chế độ xem, nhận xét, dữ liệu người dùng, v.v ... theo cách bạn muốn mà không phải thực hiện theo cách của bạn thông qua hàng tá tệp mẫu. Một danh sách bố trí được xác định trước (chỉ D7) có sẵn để kéo và thả nhiều hơn!

8
stevepurkiss

Hãy xem mô-đun Tiêu đề - http://drupal.org/project/title . Nó có thể chứng minh hữu ích cho kịch bản của bạn. Tôi đã cài đặt/kích hoạt nó vì một số lý do, có thể tương tự như của bạn và dường như nó linh hoạt về cách đặt trường tiêu đề.

Tôi đã vô hiệu hóa nó (và đang sử dụng Display Suite), vì vậy việc thu hồi của tôi có thể hơi sơ sài.

7
Greta

Đây là một giải pháp hackish và tôi chắc chắn ai đó sẽ nghĩ ra thứ gì đó thanh lịch hơn, nhưng trong trường hợp bạn bị mắc kẹt, và không ai làm ...

Bạn đã có thể sử dụng page.tpl.php để xóa việc in $title hoàn toàn và thêm một trường tùy chỉnh mới có tên Title với tên máy $ new_title hoặc đại loại như thế. Sau đó, trên nút chỉnh sửa, ẩn hộp Tiêu đề gốc và trên nút Lưu sử dụng Trường được tính toán hoặc một số php tùy chỉnh để sao chép $new_title đến $title.

Sau tất cả, hãy viết một số css để làm cho $ new_title trông giống như tiêu đề trang đã làm trước đó và bạn sẽ có thể đặt bất kỳ trường nào theo bất kỳ thứ tự nào bạn muốn, chỉ bằng cách kéo và thả trong màn hình trường quản lý. Bởi vì bạn đã sao chép qua $new_title đến $title, tiêu đề trang trong thanh trình duyệt vẫn hoạt động và không có gì phải phàn nàn về việc thiếu tiêu đề nút.

Như tôi đã nói, đó là một hack - nhưng nó sẽ hoạt động. Hãy cho tôi biết nếu bạn cần thêm thông tin

4
Frederik

page.tpl.php (vòng hoa)

...
      <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

Điều này không áp dụng cho câu hỏi Teaser trong bài viết gốc, nhưng đối với những người vấp phải điều này và chỉ muốn thực hiện nó trong chế độ xem đầy đủ, đây là một tùy chọn không có mã: hiển thị trường trong một khối (sử dụng chế độ xem, ví dụ) và đặt khối đó lên trên khối nội dung của bạn nhưng trong cùng một khu vực.

3
brad

Tôi nghĩ bạn nên sử dụng các hàm tiền xử lý trong template.php của bạn

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

Và như bổ sung

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

biến các biến và làm bất cứ điều gì bạn muốn. thêm/xóa/cập nhật.

2
dobeerman

Tôi đã giải quyết vấn đề này bằng giải pháp không mã bằng cách sử dụng Display Suite và tính năng bổ sung "Vùng để chặn" của nó. Tôi thích giải pháp này nhất vì sự linh hoạt của nó.

Về cơ bản, bật phần bổ sung "Vùng để chặn", bật hiển thị "Nội dung Fulltext" trong Display Suite. (giả sử bạn muốn hiển thị nội dung trên tiêu đề trong màn hình toàn nút, tương tự bạn có thể sử dụng nó cho bất kỳ chế độ xem nào khác ngoại trừ Mặc định). Bây giờ, trong phần "Quản lý hiển thị" của "Nội dung Fulltext", ở cuối màn hình, tab "Chặn khu vực" sẽ xuất hiện. Nhập tên khối mới ở đó, lưu và kéo và thả các trường mong muốn vào khối này. Cuối cùng, di chuyển khối vừa tạo trong màn hình Blocks ở đâu đó ở trên tiêu đề nút.

Bạn có thể xem video về cách tiếp cận tương tự ở đây: http://www.youtube.com/watch?v=y4wyjxyhbNA , tất nhiên bạn cần đặt khối phía trên tiêu đề (không phải ở thanh bên trái) cuối cùng.

2
Mirsoft

Đối với các mẫu zen dưới đây mã làm việc cho tôi.

<?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;
}
?>

Vì vậy, cuối cùng, bạn có thể dễ dàng in trường của mình trong page.tpl.php;

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

Tôi biết bạn đã sử dụng một số chủ đề để xây dựng và bây giờ đang cố gắng thêm các trường ở đầu tiêu đề.

Gợi ý của tôi cho tất cả các nhà phát triển xây dựng chủ đề trên Drupal 7 sẽ được sử dụng: chủ đề Omega + mô-đun bối cảnh và Delta. Điều này mang lại nền tảng rất vững chắc cho bố cục của bạn.

Và linh hoạt trong việc sắp xếp các Vùng, Khối và Trường.

1
AnAnD

Bạn có thể làm ist với mô-đun bảng

0
houmem