ImageField képek kiíratása külön a node.tpl.php-ban

barna89 képe

Üdv!
/azt hiszem csak én szenvedek ezzel, mert semmi dokumentációt nem találtam:/
Leválasztottam az ImageField-es képet a content-ről, mert a szöveget és a képeket külön szeretném css-elni.
Ez rendben is van, de nem tudom, hogy hogyan tudom kiíratni egyszerre a node-hoz tartozó összes képet, mármint így tudnám csak:
(de ez nagyon ronda megoldás és véges!)

<?php print $node->field_images[0]['view'] ?>
<?php print $node->field_images[1]['view'] ?>
<?php print $node->field_images[2]['view'] ?>
...

vagy, fogom az egészet és berakom egy while ciklusba és a növekvő szám helyére pl. $i -t tennék és a while küszöb értékének megadnék egy számot pl. amíg kisebb mint 20.
Ezzel is az a probléma, hogy csak 20db képet tudna kiírni, közben a feltöltés darabszáma korlátlanra van állítva.

Témában kiolvastam a drupal.org-ot, googleben sem találtam a megfelelő kódot, és a modul állományaiban sem :(

Gondolom van egy kód ami jó, mert különben nem tudom, hogyan rakja bele korlátlanul a content-be, amikor engedélyezem.

Nagyon megköszönném ha valaki segítene, mert ezt még nemigen látom át.

Drupal verzió: 
sgabe képe

Egy tömböt a foreach szerkezettel tudsz bejárni. Hogy legyen valami köze a dolognak a Drupalhoz, használj előfeldolgozót.

template.php

<?php 
/**
 * Process variables for node.tpl.php
 **/
function theme_preprocess_node(&$variables) {
  $node = $variables['node'];
  // ha van kep a nodehoz
  if (!empty($node->field_images[0]['view'])) {
    foreach ($node->field_images as $image) {
      // ha be van jelolve a kep listazasra (alapertelmezetten igen)
      if ($image['list'] == 1) {
        $images .= '<div class="field-item">'. $image['view'] .'</div>';
      } 
    }
    $variables['images'] = $images;
  }
}
?>

node.tpl.php

<!-- ha vannak kepek a nodehoz -->
<?php if (!empty($images)): ?>
  <div class="field-images"><?php print $images ?></div>
<?php endif;?>
0
0
barna89 képe

Köszönöm!
Jelenleg még egy darab képet sem ad vissza.
Végig próbálgattam az if-eket, hátha ott van valami, de nem.
(mondjuk a template.php -t most hoztam létre, de azzal nem lehet gond, mert egy utasításblokkot véletlen nyitva hagytam és akkor hibát írt.

Nem tudom, hogy most mi lehet...

0
0
sgabe képe

Olvasnivaló az előfeldolgozókról. Itt a fórumon is rendszeres téma, keress rá.

  • Átnevezted a preprocesst a saját sminked neve szerint?
  • Ürítetted a theme registryt?
0
0
barna89 képe

A theme registry-t valóban nem ürítettem, azért mert azt hittem, hogy a disable-cache modul ezt megoldja, azaz, h fejlesztés alatt ne kelljen, de ezek szerint valami nincs rendben vele :S
na mind1

Most tökéletesen működik köszönöm!
/Az olvasni valóba meg belevetem magam!/

0
0
aboros képe

fejlesztés közben érdemes beletenni a page.tpl.php -ba és akkor nem kell ürítgetni. csak figyelni kell, hogy ne felejtsed benne véletlenül. :)

drupal_rebuild_theme_registry();

a zenben ez egy kapcsolóhoz van kötve az igen hasznos 'advanced theme settings' képesség felhasználásával.

a varázslás a tömblépkedéssel, szóval az egész foreach ciklus tök felesleges.
a cck minden mező sminkelt kimenetét külön változóban is elérhetővé teszi pont azért, hogy az ilyen eseteket könnyítse. egy field_image nevű mezőnek a renderelt értéke a field_image_rendered változóban lesz a node.tpl.php -ban. ennek megfelelően ilyen kulcs alatt van az előfeldolgozó $variables tömbjében.

0
0

-
clear: both;

sgabe képe

Ezzel kellett volna kezdenem, valószínűleg a kérdezőnek megfelel a gyárilag égetett render. Viszont úgy testreszabottabb kimenet is előállítható és előfordul, hogy szükség van rá.

0
0
aboros képe

akkor már inkább a mezőt magát sminkeled vagy a mező előfeldolgozójában írod át a dolgokat. még elegánsabb, ha field formatterbe pakolod modulként. azért van a remek display fields fül, hogy ott állítgathassa be a sitebuilder (aki lehet, hogy elég sovány phpból amúgy) hogy milyen mező milyen kimenettel.

ha minden ilyesmit a smink kódjában intézel, még akkor is ha esetleg sitebuild megoldás is létezne rá, akkor hamar igen nagy lesz a káosz, amit mondjuk pár hónap múlva már elég nehéz lesz átlátni.. ..főleg egy harmadik személynek, aki mondjuk most csatlakozik a fejlesztéshez vagy átveszi tőled azt. amúgy én is gyakran esek ebbe a hibába, igyekszem leszoktatni magam róla.

0
0

-
clear: both;

barna89 képe

Van egy kis problémám az előfeldolgozós megoldással...
A CCK pager nem működik vele, azt hittem, hogy a kimenet azonos lesz az alapértelmezettel, amikor a content-ben van...
Ha átlépem a küszöb értéket 12-nek állítottam akkor kirakja a pager-t, de az első és a második oldal tartalma is azonos, azaz ugyan az a 13-13 kép 2 oldalon.

Ezzel szerintetek tudok valamit kezdeni? :S

0
0
sgabe képe

Én "speciális" igényekre gondolok. Mint írtam, előfordul hogy szükség van egy testreszabottabb kimenetre. Például a gyári render tartalmazza azokat az elemeket is, amiket nem jelöltél be listázásra.

0
0
aboros képe

igaz, nem figyeltem, létező bug.
http://drupal.org/node/358729

nekem ez oldotta meg: http://drupal.org/node/358729#comment-1661466
de azóta már van 3 -as verziója is a patchnek. :) gondolom az mégjobban megoldja. :)

0
0

-
clear: both;

aboros képe

van egy tartalom típusod (galéria?), amiben van egy field_image nevű mező. ez korlátlan számú értéket hordozhat.

szeretnéd, ha a $content -be nem lenne benne a field_image értéke, hanem egy külön divbe lenne.

a lapozó hogy jelenik meg? mikor galériák teasereit nézed? vagy nem értem a lapozó mit lapoz? a mezőben lévő képeket? vagy hogy?

0
0

-
clear: both;

barna89 képe

Van a teaser nézet, amiben látszik az első kép az imagefield-ből így:

<?php if ($teaser) {
print $node->field_images[0]['view'] 
}
?>

ez az album előképe.

ha rákattintasz azaz belépsz az albumba, akkor bejön page nézetben amiben pedig az összes kép látszik sgabe megoldásával. Valamint float-olva van mellé a szöveg.
/és a képekre kattintva thickbox-al lehet nézegetni./

A lapozónak pedig akkor kellene megjelenni ha a képek száma átlépi a 12-t (page nézetben!), de olyankor az említett hibát produkálja.
(a tartalom típusom neve: images)
/Ahogy írtad az úgy is működik, csak a cck pager nem szereti./

0
0
sgabe képe

Valószínűleg a modul nem működik, ha kiveszed a meződet a $content változóból és létrehozol neki egy újat. Visszatérve a kályhához, miért is szeretnéd így külön megjeleníteni a mezőket? Miért nem jó ott a $content változóban? Gyanítom, hogy a sminkelést úgy is meg lehetne oldani és akkor működne a CCK Pager is.

Ez már szerintem új téma.

0
0
barna89 képe

azért szerettem volna kiszedni a $contentből, mert a page-nézetű oldalt ketté akartam választani, úgy hogy, egyik felén a képek (amiket imagecache-el azonos méretűre méretezek és float-olom őket, tehát pl. 3oszlopos elrendezés), a másik oldalon a szöveg lenne.
Simán nem tudom float-olni, mert mert akkor a szöveg körebe fonja a képeket ha túllóg rajta.
Valamint egy nagy margin-left -tel sem lehet megoldani, hogy a szöveget oldalra szorítom, mert akkor mennek a képek is, pont azért mert az is a content-ben van, egyszerűen nem jut más az eszembe, hogy hogyan lehetne elszeparálni őket...

Köszönöm az eddigi segítséget! Majd max leszedem a cck-pagert!

0
0