[gelöst]Link auf Node -> Colorbox tauglich machen
am 16.02.2012 - 22:06 Uhr in
Hallo!
Ich habe einen Block-View erstellt wo ich die nächsten Termine aufliste...
Im FullCalendar gehen die Veranstaltungen (die ich mit dem Inhaltstype "Events" erstelle) in einer Colorbox auf. (das kann man im View beim FullCalendar so einstellen.)
Ich hätte aber auch gerne dass die Termine in meinem Block-View ebenfalls in einer Colorbox aufgehen.
Die Termien werden in einer Liste angezeigt. Der Titel im View-Block ist ebenso wie beim FullCalendar View (= Kalenderansicht) auf den Event-Node verlinkt...
Habe beim Block-View schon versucht den Titel eine Klasse "colorbox" zu geben. (wie es im WYSIWYG-Editor ja teilweise mit Bildern funktioniert...). Leider hat das bei einem Text-Link in meinem Block-View "Termine" nicht geklappt...
Jemand eine Idee?
- Anmelden oder Registrieren um Kommentare zu schreiben
Colorbox für Nodes
am 17.02.2012 - 08:41 Uhr
Hallo.
Hast Du eher Probleme, den Links die Klasse "colorbox" hinzuzufügen, oder das die Nodes nicht in der colorbox geöffnet werden?
Letzteres funktioniert nämlich nicht ganz so einfach.
Zufälligerweise hatte ich das gestern erst bei einem Projekt gemacht.
1. in einem eigenen Modul einen Field-Formatter definieren (in diesem Fall für node_reference-Felder):
<?php
/**
* Implements hook_field_formatter_info();
*/
function nodesincolorbox_field_formatter_info() {
$formatter = array();
if (module_exists('colorbox')) {
// Define a new field formatter to open nodes in colorbox.
$formatter['nodesincolorbox_colorbox_node'] = array(
'label' => t('Title (Colorbox)'),
'description' => t('Display the title of the referenced node as a link to open the node with colorbox.'),
'field types' => array('node_reference'),
);
}
return $formatter;
}
?>
2. hook_field_formatter_prepare_view() und hook_field_formatter_view() definieren:
<?php /**
* Implements hook_field_formatter_prepare_view().
*/
function nodesincolorbox_field_formatter_prepare_view($entity_type, $entities, $field, $instances, $langcode, &$items, $displays) {
// Let nodereference module handle the formatter preparation.
node_reference_field_formatter_prepare_view($entity_type, $entities, $field, $instances, $langcode, $items, $displays);
} /**
* Implements hook_field_formatter_view().
*/
function nodesincolorbox_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
$settings = $display['settings'];
$result = array();
switch (
$display['type']) {case 'nodesincolorbox_colorbox_node':
foreach ($items as $delta => $item) {
if ($item['access']) {
$node = $item['node'];
$label = entity_label('node', $node);
$uri = entity_uri('node', $node);
$result[$delta] = array(
'#type' => 'link',
'#title' => $label,
'#href' => $uri['path'] . '/colorbox', // Add path element.
'#options' => $uri['options'],
'#attributes' => array(
'class' => array('colorbox-load'), // Add class for colorbox.
),
);
if (!$node->status) {
$result[$delta]['#prefix'] = '<span class="node-unpublished">';
$result[$delta]['#suffix'] = '</span>';
}
}
}
break;
}
return
$result;}
?>
3. in der template.php neue Template-Suggestions für den colorbox-Popup hinzufügen:
<?php /**
* Override variables used in html templates.
*/
function mytheme_preprocess_html(&$vars) {
$args = arg();
// Last path element equals "colorbox"?
$colorbox = (array_pop($args) == 'colorbox') ? TRUE : FALSE;
if ($colorbox) {
// Add template suggestions for popups.
$vars['theme_hook_suggestions'][] = 'html__colorbox';
}
} /**
* Override variables used in html templates.
*/
function mytheme_preprocess_page(&$vars) {
$args = arg();
// Last path element equals "colorbox"?
$colorbox = (array_pop($args) == 'colorbox') ? TRUE : FALSE;
if ($colorbox) {
// Add template suggestions for popups.
$vars['theme_hook_suggestions'][] = 'page__colorbox';
}
}
?>
4. die Templates html--colorbox.tpl.php und page--colorbox.tpl.php erstellen:
<?php
/**
* @file html--colorbox.tpl.php
*/
print $page;
?>
<?php
/**
* @file page-colorbox.tpl.php
* Page template for colorbox.
*/
?>
<?php print render($title_prefix); ?>
<?php if ($title): ?>
<h1 class="title" id="page-title">
<?php print $title; ?>
</h1>
<?php endif; ?>
<?php print render($title_suffix); ?>
<?php print render($page['content']); ?>
?>
5. Einstellung in colorbox setzen (unter admin/config/media/colorbox):
Danach kann man für die entsprechenden Felder den erstellten Formatter auswählen und die Nodes werden in einer Colorbox geladen.
REWRITE RESULTS
am 18.02.2012 - 19:34 Uhr
Danke Stefan für deine ausführliche und sicherlich auch funktionierende Lösung! Hm.. ich tu mich hald ein bischen schwer weil ich noch nie ein Modul geschrieben habe... Das wird dan wohl mein erstes werden gg ;-) Naja.. mal schaun... ich werde mich mal mit dem Thema befassen (wenn ich dann endlich mal Zeit habe) und mich wieder melden...
Ich habe noch etwas anderes probiert das leider "nur FAST" geklappt hat. Und zwar habe ich im View unter dem Feld - in meinem Fall - dem Titel unter REWRITE RESULTS --> Dieses Feld als Link ausgeben folgendes angebene: Linkpfad:
[current-page:url]
und bei Klasse für Links:Colorbox
eingegeben.Jetzt macht es zwar die Colorbox auf wenn ich auf den Titel draufklicke - es erscheint aber nru ein weisses Fenster mit dem schließen Butten rechts unten und KEIN Inhalt. Es rührt sich aber auch nichts wenn man mit der Maus draufklickt oder in den abgedunkelten Bereich klickt. Ich muss die Seite Neu laden damit ich den "eingefrorenen Zustand" weg bekomme... Aber es hätte fast geklappt ggg
Naja.. dann werd ich mich wohl mal an deinen Code halten müssen :-) ...
lg, bernsch
noch ein paar Fragen
am 24.02.2012 - 12:23 Uhr
1. in einem eigenen Modul einen Field-Formatter definieren (in diesem Fall für node_reference-Felder):.
Schreib ich das in die meinmodul.module Datei?
Wo ist in deinem Code der Modulname? --> nodesincolorbox? (ist das dein Modulname?)
2. hook_field_formatter_prepare_view() und hook_field_formatter_view() definieren:
Wo definiere ich diesen Code bzw. wo erstelle ich diesen Code. (in meinmodul.module ?
3. in der template.php neue Template-Suggestions für den colorbox-Popup hinzufügen:
Hier geh ich davon aus, dass ich das 1:1 in meine template.php übernehmen kann
4. die Templates html--colorbox.tpl.php und page--colorbox.tpl.php erstellen:
Soweit OK --> übernehme den Code 1:1 in die neu erstellen tempaltes
5. Einstellung in colorbox setzen (unter admin/config/media/colorbox):
soweit OK :-)
Danke für deine Hilfe!!!
Modul
am 24.02.2012 - 12:44 Uhr
... Field-Formatter definieren ... Schreib ich das in die meinmodul.module Datei?
Ja, genau. In diesem Fall also in nodesincolorbox.module.
Wo ist in deinem Code der Modulname? --> nodesincolorbox? (ist das dein Modulname?)
Korrekt.
... hook_field_formatter_prepare_view()...
Wo definiere ich diesen Code bzw. wo erstelle ich diesen Code. (in meinmodul.module ?
Ja, genau da.
Hier geh ich davon aus, dass ich das 1:1 in meine template.php übernehmen kann
Wenn Dein Theme "mytheme" heisst, dann ja. Ansonsten musst Du "mytheme" noch mit dem Namen Deines Themes ersetzen. Eventuell gibt es bereits Funktionen mit den Namen, dann musst Du diese bestehenden Funktionen mit dem Code erweitern.
Tipp: http://drupal.org/node/1074360
GELÖST
am 11.06.2012 - 10:23 Uhr
Ich denke das ganze hat sich mit dem Modul colorbox_node erledigt :-) !
lg
Noch nicht ganz...
am 23.11.2012 - 19:10 Uhr
Hallo, nun hat sich auch bei mir mit http://drupal.org/project/colorbox_node einiges erledigt.
Aber leider habe ich das Problem das ich einer Grafik im View nicht die entsprechende class zuordnen kann. Ich will die grafik zum zum inhalt in der colorbox darstellen. klappt nicht... weiss nicht wie... Auch die hochgeladene Grafik kann ich nicht mit einer class versehen... oder wie geht das... ohne in den themes code oder so herumzuspielen?
hallo
am 23.11.2012 - 19:16 Uhr
das klappt bei mir nicht.... [current-page:url] funktioniert nicht... muss ich das anders schreiben..?