[gelöst] Region als Block zwischen Teaser und Inhalt im Artikel
Eingetragen von holger@drupal.org (544)
am 06.12.2008 - 14:39 Uhr in
am 06.12.2008 - 14:39 Uhr in
Hallo allerseits,
Wie kann man einen Block [ID=1] der einer Region zugewiesen ist zwischen Teaser (Anrisstext) und Inhalt im Artikel bei Vollansicht einbringen?
Beispiel:
Teasertext Teasertext Teasertext Teasertext Teasertext
Teasertext Teasertext Teasertext Teasertext Teasertext
!break
[Block ID=1]
Rest vom Artikel ...........
Af Drupal.org gibt es zwar einige Beiträge dazu, aber leider nicht für Drupal 6.6 und die Codeschnipsel sind ja leider nicht kompatibel.
Weiß jemand wie man das realisieren kann?
Gruß Holger
- Anmelden oder Registrieren um Kommentare zu schreiben
Block zwischen Teaser und Inhalt im Artikel
am 07.12.2008 - 20:19 Uhr
Ich habe heute noch unendlich viel auf Drupal.org dazu gesucht aber leider ohne Erfolg.
Ist es tatsächlich nicht möglich, einen Block zwischen Teaser und Inhalt im Artikel darzustellen?
Beste Grüße, Holger
---
IT-News und IT-Jobs auf w3Projekt.com
Beste Grüße, Holger
---
IT-News und IT-Jobs auf w3Projekt.com
Willste nicht einfach die
am 07.12.2008 - 20:37 Uhr
Willste nicht einfach die Links und mitteilen, dann können wir dir einfacher helfen
Eigentlcih solltest das einfach machbar sein
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.deXING
ich hatte dieses als Vorlage
am 08.12.2008 - 17:52 Uhr
ich hatte dieses als Vorlage http://alldrupalthemes.com/blog/automagically-placing-adsense-inside-con...
Da geht es zwar um adsense aber ich dachte einen Block könnte man auch so einfügen.
Leider hat es nicht funktioniert und gab immer nur eine weiße Seite.
Beste Grüße, Holger
---
IT-News und IT-Jobs auf w3Projekt.com
Beste Grüße, Holger
---
IT-News und IT-Jobs auf w3Projekt.com
Ich hatte vor 3 Jahren
am 10.12.2008 - 11:10 Uhr
Ich hatte vor 3 Jahren schonmal ein ähnliches Problem http://www.drupalcenter.de/node/213
Die Lösung hatte dann zwar funktioniert, aber sehr viel besser wäre es, wenn man nicht dafür in den Core-Dateien rumfummeln muss.
Bislang fand ich leider noch immer keine Variante wie man einen Block zwischen Teaser und Inhalt bei Vollansicht einbringt.
Wenn ich in der node-story.tpl.php vor $content den Block platziere, dann wird dieser leider über dem Teaser in der Vollansicht des Beitrags angezeigt und nicht unter dem Anrisstext.
Beste Grüße, Holger
---
IT-News und IT-Jobs auf w3Projekt.com
Beste Grüße, Holger
---
IT-News und IT-Jobs auf w3Projekt.com
Block zwischen Teaser und Inhalt im Artikel
am 11.12.2008 - 08:23 Uhr
Ich habe jetzt nochmals versucht nach der Anleitung auf http://alldrupalthemes.com/blog/automagically-placing-adsense-inside-con...
Das Ganze unter Drupal 6.6 mit Garland bzw. Minelli als Theme.
Die Dateien sehen wie folgt aus:
minelli.info
; $Id: minnelli.info,v 1.7 2007/12/04 20:58:44 goba Exp $
name = Minnelli
description = Tableless, recolorable, multi-column, fixed width theme.
version = VERSION
core = 6.x
base theme = garland
stylesheets[all][] = minnelli.css
; Information added by drupal.org packaging script on 2008-10-22
version = "6.6"
project = "drupal"
datestamp = "1224703816"
regions[left] = Left sidebar
regions[right] = Right sidebar
regions[content] = Content
regions[header] = Header
regions[footer] = Footer
regions[belowPost] = Below Posts
regions[incontent] = In Content
garland.info
; $Id: garland.info,v 1.5 2007/07/01 23:27:32 goba Exp $
name = Garland
description = Tableless, recolorable, multi-column, fluid width theme (default).
version = VERSION
core = 6.x
engine = phptemplate
stylesheets[all][] = style.css
stylesheets[print][] = print.css
; Information added by drupal.org packaging script on 2008-10-22
version = "6.6"
project = "drupal"
datestamp = "1224703816"
regions[left] = Left sidebar
regions[right] = Right sidebar
regions[content] = Content
regions[header] = Header
regions[footer] = Footer
regions[belowPost] = Below Posts
regions[incontent] = In Content
template.php
<?php
// $Id: template.php,v 1.16 2007/10/11 09:51:29 goba Exp $
/**
* Sets the body-tag class attribute.
*
* Adds 'sidebar-left', 'sidebar-right' or 'sidebars' classes as needed.
*/
function phptemplate_body_class($left, $right) {
if ($left != '' && $right != '') {
$class = 'sidebars';
}
else {
if ($left != '') {
$class = 'sidebar-left';
}
if ($right != '') {
$class = 'sidebar-right';
}
}
if (isset($class)) {
print ' class="'. $class .'"';
}
}
/**
* Return a themed breadcrumb trail.
*
* @param $breadcrumb
* An array containing the breadcrumb links.
* @return a string containing the breadcrumb output.
*/
function phptemplate_breadcrumb($breadcrumb) {
if (!empty($breadcrumb)) {
return '<div class="breadcrumb">'. implode(' › ', $breadcrumb) .'</div>';
}
}
/**
* Allow themable wrapping of all comments.
*/
function phptemplate_comment_wrapper($content, $node) {
if (!$content || $node->type == 'forum') {
return '<div id="comments">'. $content .'</div>';
}
else {
return '<div id="comments"><h2 class="comments">'. t('Comments') .'</h2>'. $content .'</div>';
}
}
/**
* Override or insert PHPTemplate variables into the templates.
*/
function phptemplate_preprocess_page(&$vars) {
$vars['tabs2'] = menu_secondary_local_tasks();
// Hook into color.module
if (module_exists('color')) {
_color_page_alter($vars);
}
// had to remove a closing brace here, but technically it should be there?
// Only does the check if required - see this node for explanation http://drupal.org/node/129762
if(!$vars['show_blocks']) {
global $theme;
$regions = system_region_list($theme);
foreach (array_keys($regions) as $region) {
// Only set left and right regions
// Drupal core sets the other blocks already
// IMHO this shows a real lack of design considerations for leaving these out!
if ($region == 'left' || $region == 'right') {
$blocks = theme('blocks', $region);
if(isset($variables[$region])) {
$vars[$region] .= $blocks;
}
else {
$vars[$region] = $blocks;
}
}
}
}
}
/**
* Returns the rendered local tasks. The default implementation renders
* them as tabs. Overridden to split the secondary tasks.
*
* @ingroup themeable
*/
function phptemplate_menu_local_tasks() {
return menu_primary_local_tasks();
}
function phptemplate_comment_submitted($comment) {
return t('!datetime — !username',
array(
'!username' => theme('username', $comment),
'!datetime' => format_date($comment->timestamp)
));
}
function phptemplate_node_submitted($node) {
return t('!datetime — !username',
array(
'!username' => theme('username', $node),
'!datetime' => format_date($node->created),
));
}
/**
* Generates IE CSS links for LTR and RTL languages.
*/
function phptemplate_get_ie_styles() {
global $language;
$iecss = '<link type="text/css" rel="stylesheet" media="all" href="'. base_path() . path_to_theme() .'/fix-ie.css" />';
if (defined('LANGUAGE_RTL') && $language->direction == LANGUAGE_RTL) {
$iecss .= '<style type="text/css" media="all">@import "'. base_path() . path_to_theme() .'/fix-ie-rtl.css";</style>';
}
return $iecss;
}
function phptemplate_preprocess_node(&$vars) {
if (!$vars['teaser']){
foreach (array('belowPost') as $region) {
$vars[$region] = theme('blocks', $region);
}
}
}
function _phptemplate_variables($hook, $vars) {
//region distributor
$variables = array();
// Load the node region only if we're not in a teaser view.
if ($hook == 'node' && !$vars['teaser']) {
// Load region content assigned via blocks.
foreach (array('incontent') as $region) {
$variables[$region] = theme('blocks', $region);
}
}
return $variables;
return $vars;
}
node-story.tpl.php
<?php
$arr = explode ("</p>", $content);
if ( strpos ($arr[0], "</span>") > 0 ) {
$arr[1] = $incontent . $arr[1];
} else {
$arr[0] = $incontent . $arr[0];
}
$content = implode("</p>", $arr);
endif;
?>
<div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?>">
<?php print $picture ?>
<?php if ($page == 0): ?>
<h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>
<?php endif; ?>
<?php if ($submitted): ?>
<span class="submitted"><?php print format_date($node->created, 'custom', 'd.m.Y'); ?></span>
<?php endif; ?>
<div class="content clear-block">
<?php print $content ?>
<?php print $belowPost ?>
<!--Start Anpassung Tags-->
<?php
$termsCategories = taxonomy_node_get_terms_by_vocabulary($node, $vid = 1, $key = 'tid'); // Holt nur Kategorien
foreach ( $termsCategories as $term ) { $nodeCategories .= l($term->name,'taxonomy/term/'.$term->tid, array('title' => $term->name)); }
$termsTags = taxonomy_node_get_terms_by_vocabulary($node, $vid = 2, $key = 'tid'); // Holt nur Tags
foreach ( $termsTags as $term ) { $nodeTags .= ' '.l($term->name,'taxonomy/term/'.$term->tid, array('title' => $term->name));}
?>
<div class="nodebottom">
<?php if ($page): ?><strong><?php print t('Kategorie: ') .$nodeCategories; ?><?php if (count($taxonomy)): ?><?php endif; ?>
<?php print t('<br /><br /> Schlagworte: ').$nodeTags; ?></strong><?php endif; ?>
</div>
<!--Ende Anpassung Tags-->
</div>
<div class="clear-block">
<?php if ($links): ?>
<?php if ($picture): ?>
<br class="clear" />
<?php endif; ?>
<div class="links" style="text-align:right;">
<?php if (!$page) { ?>
<a href="<?php print $node_url ?>" class="node_view_more" title="<?php print $title ?>">» zum Artikel</a>
<?php }
else {
print $links;
} ?>
</div>
<?php endif; ?>
</div>
</div>
Resultat: eine weiße Seite :-(
Ich vermute, das es am code in der node-story.tpl.php liegt aber laut der Anleitung soll dieser Bereich ja dort ganz oben eingefügt werden oder versteh ich das falsch?
$arr = explode ("</p>", $content);
if ( strpos ($arr[0], "</span>") > 0 ) {
$arr[1] = $incontent . $arr[1];
} else {
$arr[0] = $incontent . $arr[0];
}
$content = implode("</p>", $arr);
endif;
Beste Grüße, Holger
---
IT-News und IT-Jobs auf w3Projekt.com
Beste Grüße, Holger
---
IT-News und IT-Jobs auf w3Projekt.com
EIn Problem ist sicher dass
am 11.12.2008 - 12:48 Uhr
EIn Problem ist sicher dass $taxonomy nur ein String ist, und deshalb Nicht gezählt werden kann
<?php
if ($taxonomy) :
endif;
?>
reicht völlig
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.deXING
Wie meinst du das? Beste
am 11.12.2008 - 13:08 Uhr
Wie meinst du das?
Beste Grüße, Holger
---
IT-News und IT-Jobs auf w3Projekt.com
Beste Grüße, Holger
---
IT-News und IT-Jobs auf w3Projekt.com
<div class="nodebottom">
am 11.12.2008 - 13:15 Uhr
Ich bin jetztnicht der php-Crack abe ich denke du solltest den Code für
<div class="nodebottom">
ändern, dort zählst du die Variable.Hier noch den ganzen Abschnitt aus deiner node-story.tpl.php
<div class="nodebottom">
<?php if ($page): ?><strong><?php print t('Kategorie: ') .$nodeCategories; ?><?php if (count($taxonomy)): ?><?php endif; ?>
<?php print t('<br /><br /> Schlagworte: ').$nodeTags; ?></strong><?php endif; ?>
</div>
Gruss Roger
Gruss Roger
Gelöste Forenbeiträge mit [gelöst] im Titel ergänzen (1. Posting vom Thema) <==> das erleichtert das finden von Lösungen
Rabbit69 schrieb Ich bin
am 11.12.2008 - 14:07 Uhr
Ich bin jetztnicht der php-Crack abe ich denke du solltest den Code für
<div class="nodebottom">
ändern, dort zählst du die Variable.Hier noch den ganzen Abschnitt aus deiner node-story.tpl.php
<div class="nodebottom">
<?php if ($page): ?><strong><?php print t('Kategorie: ') .$nodeCategories; ?><?php if (count($taxonomy)): ?><?php endif; ?>
<?php print t('<br /><br /> Schlagworte: ').$nodeTags; ?></strong><?php endif; ?>
</div>
Gruss Roger
Um diesen Bereich geht es nicht, der funktioniert ja :-)
ich glaube der Fehler liegt hier:
$arr = explode ("</p>", $content);
if ( strpos ($arr[0], "</span>") > 0 ) {
$arr[1] = $incontent . $arr[1];
} else {
$arr[0] = $incontent . $arr[0];
}
$content = implode("</p>", $arr);
endif;
Laut der Anleitung auf http://alldrupalthemes.com/blog/automagically-placing-adsense-inside-con... soll dies ja in der node-story.tpl.php ganz oben rein. Dann bekomm ich aber wenn ich es hochlade nur eine weiße Seite angezeigt.
Beste Grüße, Holger
---
IT-News und IT-Jobs auf w3Projekt.com
Beste Grüße, Holger
---
IT-News und IT-Jobs auf w3Projekt.com
Region als Block zwischen Teaser und Content
am 11.12.2008 - 18:56 Uhr
Ich hab auf drupal.org auch mal was dazu geschrieben, http://drupal.org/node/345214#comment-1150631
Es muss doch möglich sein eine Region als Block zwischen Teaser und Content darzustellen oder ?
Hier mal ein Bild wie ich das meine http://w3projekt.com/demo.png
Beste Grüße, Holger
Beste Grüße, Holger
---
IT-News und IT-Jobs auf w3Projekt.com
Region als Block zwischen Teaser und Content
am 11.12.2008 - 21:48 Uhr
Ich habe es jetzt so versucht in der node-story.tpl.php:
<?php if ($page) && if ($teaser) {
print $teaser;
print $block = module_invoke('block', 'block', 'view', 1);
print $block['content'];
print $content; }
?>
Leider gibt das wieder nur eine weiße Seite und keine Lösung -.-
Es ist zum Verzweifeln.
Sollte es tatsächlich nicht möglich sein, eine Region als Block zwischen Teaser und Content darzustellen?
Beste Grüße, Holger
---
IT-News und IT-Jobs auf w3Projekt.com
Beste Grüße, Holger
---
IT-News und IT-Jobs auf w3Projekt.com
[gelöst] Region als Block zwischen Teaser und Inhalt im Artikel
am 13.12.2008 - 09:55 Uhr
Ansich war die Lösung einfacher als man denkt:
Ich beschreibe kurz wie es geht, ohne das man in den Core Dateien etwas ändern muss.
Realisiert mit Drupal 6.8 und dem Garland Theme, sollte aber auch mit jedem anderen Theme realisierbar sein ;-)
1. Benötigte Module: CCK und Content Templates (ConTemplate)
2. Man legt erstmal einen neuen Block an -> admin/build/block Der Inhalt des Blocks ist beliebig, zum Beispiel kann man Banner oder Adsense einfügen, aber auch anderen Inhalt. Der Block kann einer Region zugewiesen werden, muss es aber nicht.
3. Damit das Ganze dann ein einheitliches Bild bei der Ausgabe der Artikel ergibt hab ich für CCK neue Felder angelegt -> admin/content/node-type/story/fields a) Textfeld: Haupttext (Dieser soll unter dem Block dargestellt sein.) b) Imagefield (optional) c) TextUnten (optional, wird genutzt um Text unter einer Grafik darzustellen)
4. Nun wird der Block mit ConTemplate eingebracht -> admin/content/templates/story
Dazu bei "Textkörper" den Haken setzen bei "Affect body output" und in das Formular die Werte eintragen welche dann letztendlich dargestellt werden sollen. Diese findet man bei "Body Variables".
In meinem Fall sind das:
<?php print $node->content['body']['#value'] ?> //gibt den Teaser aus
<?php
$block = module_invoke('block', 'block', 'view', 1);
print $block['content'];
?> //gibt den Block aus, in dem Fall Block ID = 1
<?php print $node->field_1[0]['view'] ?> //gibt den Haupttext unter dem Block aus
<?php print $node->content['field_bild']['#children'] ?> //gibt Grafiken des Imagefield aus wenn vorhanden
<div align="center"><em><?php print $node->content['field_bild']['field']['items'][0]['#item']['data']['description'] ?></em></div> //gibt die Beschreibung des Bildes darunter aus, sofern vorhanden
<?php print $node->field_2[0]['view'] ?> //gibt den Inhalt des Textfeldes "TextUnten" aus, unterhalb von Grafiken
<p><?php print $node->content['trackback']['#children'] ?></p> //Trackback Link
Das wars schon. Die Variablen für den Output kann man beliebig anpassen, HTML und PHP Code sind möglich.
Beste Grüße, Holger
---
IT-News und IT-Jobs auf w3Projekt.com
Beste Grüße, Holger
---
IT-News und IT-Jobs auf w3Projekt.com