it-swarm-eu.dev

Jak zobrazit pole před názvem uzlu?

Při zobrazení upoutávky v D7 se snažím vykreslit určité pole před názvem uzlu.

Účinně chci jít z this na this .

Podíval jsem se na aktualizaci node.tpl.php, ale všiml jsem si, že odděluje $title z $content takže si nejsem jistý, jak k tomu přistupovat. Po nějakém hledání jsem zjistil, že lidé navrhli použití modulů CCK a ConTemplate , abych to obešel v Drupalu-6, ale m přemýšlel, jestli existuje více řešení Drupal-7.

Nějaké návrhy?

41
irishbuzz

To je opravdu docela jednoduché s Drupal 7.

S render a hide víte, máte možnost řídit umístění jednoho prvku v $content bez nutnosti tisknout všechny položky, které jste sami potřebovali, v Drupal 6).

Zjednodušená šablona uzlu vypadá takto:

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

Malá modifikace by vyhovovala vašim potřebám:

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

Pomocí render můžete výstup prvku. Je to chytřejší než pouhý tisk věcí, protože Drupal bude sledovat, co bylo vykresleno, aby se zabránilo tomu, aby se stejná věc tiskla dvakrát na místo. Při vykreslování pole nad titulem jste také odebrání toho, co je vykresleno, když $content je vykresleno.

53
googletorp

Display Suite je také docela v pohodě.

Sada Display Suite vám umožňuje získat plnou kontrolu nad tím, jak se váš obsah zobrazuje pomocí rozhraní drag and drop. Uspořádejte své uzly, pohledy, komentáře, uživatelská data atd. Tak, jak chcete, aniž byste museli projít desítky souborů šablon. Předdefinovaný seznam rozvržení (pouze D7) je k dispozici pro ještě větší zábavu při přetahování!

9
stevepurkiss

Podívejte se na modul Title - http://drupal.org/project/title . Může to být užitečné pro váš scénář. Nainstaloval jsem/povolil to z nějakého důvodu, pravděpodobně podobné té vaší, a zdálo se, že dává flexibilitu, jak umístit pole názvu.

Od té doby jsem to zakázal (a používám Display Suite), takže moje vzpomínky mohou být trochu útržkovité.

8
Greta

Toto je hackerské řešení a jsem si jistý, že někdo přijde s něčím elegantnějším, ale v případě, že jste uvízl a nikdo ne ...

Můžete použít page.tpl.php k odstranění tisku $title dohromady a přidejte nové vlastní pole s názvem Název s názvem stroje $ new_title nebo něco podobného. Poté při úpravě uzlu skryjte původní pole Název a v uzlu Uložit pomocí pole Computed Field nebo nějakého vlastního php zkopírujte $new_title to $title.

Koneckonců, napiš nějaký css, aby $ new_title vypadal jako nadpis stránky předtím a ty bys měl být schopen umístit jakákoli pole v jakémkoli pořadí, které chceš, pouhým přetažením na obrazovku Spravovat pole. Protože jste zkopírovali $new_title to $title, název stránky v panelu prohlížeče by měl stále fungovat a nic by si nemělo stěžovat na chybějící názvy uzlů.

Jak jsem řekl, je to hack - ale bude to fungovat. Dejte nám vědět, pokud potřebujete více informací

5
Frederik

page.tpl.php (věnec)

...
      <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';
  }
}
4
dobeerman

To se netýká Teaserovy otázky v původním příspěvku, ale pro lidi, kteří na ně narazili a chtějí, aby se to stalo v plném zobrazení, je zde možnost bez kódu: zobrazení pole v bloku (pomocí zobrazení, například) a umístěte tento blok nad blok s obsahem, ale do stejné oblasti.

4
brad

Myslím, že byste měli používat funkce předzpracování ve vaší template.php

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

A jako další

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

výpis proměnných a dělat cokoli, co chcete. přidat/odebrat/aktualizovat.

3
dobeerman

Vyřešil jsem to codeless řešením pomocí Display Suite a jeho funkcí „Region to Block“. Toto řešení se mi nejvíce líbí kvůli jeho flexibilitě.

V zásadě povolte část Doplňky „Region to Block“, v zobrazení Suite zapněte zobrazení „Fulltext Content“. (za předpokladu, že chcete zobrazit obsah nad titulem na displeji s plným uzlem, podobně jej můžete použít pro jakýkoli jiný režim zobrazení kromě výchozího). Nyní by se v dolní části obrazovky v části „Spravovat zobrazení“ v části „Plnotextový obsah“ měla zobrazit karta „Blokovat oblasti“. Sem zadejte nový název bloku, uložte a přetáhněte požadovaná pole do tohoto bloku. Nakonec přesuňte nově vytvořený blok na obrazovce Bloky někde výše název uzlu.

Video se stejným přístupem si můžete prohlédnout zde: http://www.youtube.com/watch?v=y4wyjxyhbNA , samozřejmě musíte umístit blok nad nadpis (nikoli na levý postranní panel) na konci.

3
Mirsoft

Pro níže uvedené šablony pro mě funguje kód.

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

Nakonec si můžete své pole snadno vytisknout na stránce page.tpl.php;

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

Vím, že byste už použili nějaké téma k vytvoření a nyní se pokoušíte přidat pole v horní části názvu.

Mé návrhy všem vývojářům, kteří staví téma na Drupal 7: moduly Omega téma + Kontext a Delta, což poskytuje velmi silné základy pro vaše rozvržení).

A flexibilita při uspořádání regionů, bloků a polí.

2
AnAnD

Můžete to udělat s modulem panely

1
houmem