CCK tartalmak listaja

nevergone képe

Sziasztok...!

Egy kis segitseget szeretnek kerni a CCK hasznalataval kapcsolatban.
Letrehoztam egy sajat tartalomtipust (legyen a neve teszt_tartalom),
amelynek van egy kotelezoen kitoltendo datum mezoje (a date modullal
hoztam letre, legyen a neve field_date), illetve egy szoveg mezoje (legyen
a neve field_text). Szeretnek egy olyan node -t letrehozni, amely a datum
mezo alapjan egy listat tartalmazna a teszt_tartalom tipusu node -okrol, a
lista egyes sorai egyben linkek lennenek az adott node -okra
(termeszetesen egy adott datumot tobb node is tartalmazhat). Azert
szeretnem leprogramozni, hogy probalgassam a CCK hasznalhatosagat, illetve
szeretnek az egyes evek koze elvalaszto szoveget tenni.

Valami ilyesmire gondoltam:

- 2006. -

2006.01.01. -> arra a teszt_tartalom tipusu node -ra mutat, amelynek a
field_date mezoje 2006.01.01.
2006.01.02. -> arra a teszt_tartalom tipusu node -ra mutat, amelynek a
field_date mezoje 2006.01.02.
2006.01.03. -> arra a teszt_tartalom tipusu node -ra mutat, amelynek a
field_date mezoje 2006.01.03.
2006.01.03. -> arra a teszt_tartalom tipusu node -ra mutat, amelynek a
field_date mezoje 2006.01.03.

- 2007. -

2007.01.01. -> arra a teszt_tartalom tipusu node -ra mutat, amelynek a
field_date mezoje 2007.01.01.
2007.01.02. -> arra a teszt_tartalom tipusu node -ra mutat, amelynek a
field_date mezoje 2007.01.02.

Koszonom a segitseget. :)

Pál úr képe

Nekem majdnem ilyet sikerült CCK + Views-szal összehozni, de nekem meg pont hogy nem kellenének a linkek a node-ok címére... Ráadásul a Views-szal más gondjaim is vannak...

A címet az "automatic nodetitle" segítségével elő tudod állítani, utána pedig már "csak" egy view kell.

Azért a kérdés továbbra is áll: tud valaki segíteni?

0
0
Illyés Edit képe

Segíteni miben?

0
0
Pál úr képe

[...] Szeretnek egy olyan node -t letrehozni, amely a datum
mezo alapjan egy listat tartalmazna a teszt_tartalom tipusu node -okrol, a
lista egyes sorai egyben linkek lennenek az adott node -okra
(termeszetesen egy adott datumot tobb node is tartalmazhat). [...]

[...] nekem meg pont hogy nem kellenének a linkek a node-ok címére... Ráadásul a Views-szal más gondjaim is vannak... [...]

0
0
Illyés Edit képe

Az Event modul és a Views használatáról pedig már volt kérdés itt ezen a fórumon.

nekem meg pont hogy nem kellenének a linkek a node-ok címére...

Akkor ne tedd rá őket (Node:Title, Option:Without link).

Ráadásul a Views-szal más gondjaim is vannak... [...]

Egyszerű megoldás: kapcsold ki.

0
0
Pál úr képe

[...]
nekem meg pont hogy nem kellenének a linkek a node-ok címére...
Akkor ne tedd rá őket (Node:Title, Option:Without link).

Sajnos, ha nem "Full nodes" nézetet választok, akkor csak a kategória node-jait teszi ki a view. Ha pedig "Full nodes" nézetet kapcsolok be, akkor (gondolom emiatt: "Fields are only meaningful with List view and Table View; they allow you to choose which fields are presented and in what order.") pedig hiába adom meg a "Node:Title"-nél, hogy "Without link"...

A célom pedig olyan oldal létrehozása lenne, ahol az egyes kategóriák címei látszódnak, (link nélkül), és a kategóriákban a teljes node tartalma is, a címével együtt, szintén cím nélkül.

Ha más megoldás nem marad, jobb híján template-ből kell átírnom, bár azt hittem, van ennél szebb út is.

0
0
Illyés Edit képe

A célom pedig olyan oldal létrehozása lenne, ahol az egyes kategóriák címei látszódnak, (link nélkül), és a kategóriákban a teljes node tartalma is, a címével együtt, szintén cím nélkül.

Nem értem..:(

Talán írj egy konkrét példát, hogy milyen kategóriákkal dolgozol, hogyan néznek ki a node-ok, stb.

0
0
Pál úr képe

Tehát.

Árlista oldal, de nem szerettem volna ágyúval verébre, tehát nem ecommerce, hanem...

A kategóriák olyan node-okból állnak, amit a Category modullal hoztam létre. A Category 'Display settings'-jében beállítottam, hogy 'Show nodes listing'legyen, ezáltal ha egy kategória-node-ra megyek rá, akkor az alája rendelt node-ok (és teljes tartalmuk) látszik. Amikor ez jó volt, létrehoztam egy view-t, amiben "Full nodes"-listát választottam, és megadtam, hogy csak az 'Árlista'-kategóriába tartozó elemket listázza ki egymás után. ("Book: Parent Node" operátor: "Is One Of" Érték: "186").

De: hiába próbálok bárhogy a lelkére beszélni, akkor is a kategória-node-ok címét linkként teszi fel a lapra.

(Az logikus, hogy az egyes kategóriákon belül a node-ok címét is linkként, mert azt így csinálja a Category -> "Show nodes listing" miatt, és _azt_ majd elkapom a sminkben. Az nem logikus, hogy a kategóriák címét miért teszi linkké.)

Ha nem "Full nodes" listát csinálok, akkor ugyan kiteszi nekem (nem linkként, ha úgy állítom be) a kategória-node-okat (és az alárendelt node-okat nem), de ez nekem nem jó, mert ettől nem lesz árlista az oldal.

0
0
Illyés Edit képe

Volt egy olyan baljós megérzésem, hogy Category modulról van szó... Sajnos ebben nem tudok segíteni, mert én leszedtem a Category-t mindenhonnan, és igazából nincs is kedvem újrainstallálni :)

Szerintem egy egyszerű árlista miatt nem érdemes az életedet komplikálni. A termék node-okat termékcsoport kategóriákba rendezed, a kategóriákra készítesz egy-egy táblázatos nézetet a szükséges mezőkkel (Node:Title, Node:Body, stb.), a nézeteket pedig Insert View modullal összefűzöd egy sima node-ba.

Ha nagyon akarod automatizálni, akkor a node-ba PHP kódot is beilleszthetsz, ami lekérdezi a rendelkezésre álló nézeteket, az pedig szinte teljesen mindegy, hogy az új termékcsoport felvitelekor kategória+nézetet kell létrehoznod, vagy Category-val egy kategória node-ot – a Category űrlap kitöltése kb. annyi időt vesz igénybe, mint a taxonómia+nézet együtt, hidd el, tapasztalatból beszélek ;)

0
0
Pál úr képe

Elfogadom, leszedtem a Category-t.

Megelégedve egészen még most sem vagyok. :)

Ami nem tetszik, hogy az egyes összefoglaló-csoportokat (most nálam lustaságomból, meg azért, hogy egy kicsit átlássam, az árlistánál könyvlapok) ilyen macis egy oldalra összeszedni. Pl. nem árlista, hanem más oldalon, van, ahol 50+ ilyen csoport van.

A másik, hogy még ne látok olyanokat, hogy az egyes árlista-elemek úgy épülnek fel, hogy a node-okban CCK-val saját mezőket hoztam létre, és hogy ezeket a saját mezőket a view-ban mind megjeleníti, akkor is, ha nincs értéke. Pedig akkor nem kellene... Ezt valahogy meg lehet neki tanítani?

0
0
Illyés Edit képe

Mondtam én egy szóval is, hogy szedd le? :)

A termékcsoportok ugye a nézetek, erre tudsz PHP-t írni, ami kiszedi őket az adatbázisból. Meg kell nézni, hogy a Views modul pontosan hogyan tartja nyilván a nézeteket. Még jobb, ha a Views kódjában keresel egy jó kis függvényt, ami pontosan ezt csinálja.

Árlista elem alatt a terméket érted? Pl. van egy termék tartalomtípusod, és ezen belül egy cikkszám mező – és ha hiányzik a cikkszám, akkor nem akarod a cikkszám sort megjeleníteni? Mondjuk ez táblázatos megjelenítésnél nem zavaró, hogy egy cella itt-ott üresen marad... De lehet, hogy félreértelek.

0
0
Pál úr képe

Igen, a termékcsoportok külön nézetek, egy-egy "Book: Parent Node" alapján szűrve.

Van egy árlista-elem tartalomtípusom, és ezen belül pl. többféle ár mezőm. Mondjuk 3 darab, mert mindenféle okokból 3 különböző ár van. Namost van olyan, hogy egy mező nincs kitöltve, az is jelent valamit, és akkor nem kellene megjelenjen az egész sor (tehát sem a label, sem az, hogy nincs utána semmi), és van olyan, hogy az ár 0 Ft, de annak meg meg kellene jelennie :)

A táblázatos megjelenítésben valóban nem zavaró, ezt közben tegnap ki is próbáltam, csak félek, hogy nem tudom eléggé felrobbantani a táblázatos nézetet olyanra, ahogy azt a designer elképzelte, vagyis hogy szó se legyen benne táblázatról.

0
0
Illyés Edit képe

Robbantgatáshoz hasznos lehet a Views Theme Wizard, bár ami nálam van fent (2 hónapos verzió), az még csak lista nézetre működik. Lényegében kidobja azokat a sminkfüggvényeket, amelyeket a template.php-ben felülírásra tudsz használni.

0
0
nevergone képe

Azért érdekelne a megoldás (vagy segítség) leprogramozva is (PHP kódban), hogy tanuljak is valamit.
Mindenesetre köszönöm a választ. :)

0
0
Illyés Edit képe

A CCK node-oknak a címe legyen a dátum (2007.03.31). Megnézheted a Pál úr által belinkelt automatic nodetitle modult, bár nem tudom, hogyan kezeli a dátumokat (az adatbázisban nem dátum tárolódik, hanem időbélyeg, ezt a Drupal beépített dátumkezelő függvényeivel lehet átalakítani). Majd Views modullal listákat készítesz a node-okból, ahol csak a címet jeleníted meg linkként (Node:Title, Option:As link). Több listát összefűzhetsz egy oldal v. írás node-on belül Insert View vagy Viewfield modullal.

Ha teljesen automatizált megoldást szeretnél, akkor kiszeded az adatbázisból a teszt típusú node-okhoz tartozó nid azonosítót, node_load() függvénnyel egyenként behívod a node-okat, és a node nid és field_date mezőiből linkeket készítesz. Az elválasztó szöveg beszúrásához iterálás közben nyilván meg kell vizsgálnod a field_date értékét és annak feltételeként kiírni a kívánt szöveget.

Azért érdekelne a megoldás (vagy segítség) leprogramozva is (PHP kódban), hogy tanuljak is valamit.

Valamit félreértettél, a fórum nem erre való. Ha segítséget szeretnél, akkor írd le, hogy hogyan indultál el, hol akadtál el, stb. Ha téged nem érdekel annyira a feladat, hogy legalább elkezdj egy kicsit piszmogni vele, akkor engem miért érdekeljen annyira, hogy írjak neked egy kisalkalmazást?

0
0
nevergone képe

Valamit félreértettél, a fórum nem erre való. Ha segítséget szeretnél, akkor írd le, hogy hogyan indultál el, hol akadtál el, stb. Ha téged nem érdekel annyira a feladat, hogy legalább elkezdj egy kicsit piszmogni vele, akkor engem miért érdekeljen annyira, hogy írjak neked egy kisalkalmazást?

Teljesen igazad van, és az általad vázolt segítség fel sem merült bennem. Ami segítség érdekelne a témában (hogy a jó irányban el tudjak indulni), az az lenne, hogyan lehetséges valamilyen módszerrel az összes tartalmat "bejárni" egy programban.
Utána a többivel már megpróbálkoznék én (az adott tartalom típusának lekérdezése, ha megfelelő, akkor a szükséges adatok kinyerése, stb.), csak erre a (szerintem) egyszerű dologra nem találtam sehol sem mintakódot. És ehhez sem teljes alkalmazás, csak valami "snippets", töredék. Bevallom, nem igazán foglalkoztam eddig a Drupal alapú PHP programozással, ezért szeretnék pl. ilyen apró kódtöredéken át belelátni kissé a lelkivilágába.
Mindenesetre nagyon köszönöm a segítséged, és az általad javasolt megoldást is mindenképpen ki fogom próbálni. :)

0
0
Illyés Edit képe

hogyan lehetséges valamilyen módszerrel az összes tartalmat "bejárni" egy programban

Hát az összeset szerintem nem érdemes, elég csak a teszt tartalomtípusodba tartozó node-ok nid-jét lekérdezni, majd a nid alapján node_load()-dal megfogni a tartalmat, ez lesz a $node, aminek aztán meg tudod nézni az összes jellemzőjét ($node->title, $node->teaser, $node->body, stb.).

Erre eddig SQL lekérdezéseket kellett írni – az 5.x API-t még nem néztem meg komolyabban, se a CCK-t – lehet, hogy van erre valami kész függvény aminek csak beadod a tartalomtípust és a többit magától megcsinálja, utána kell nézni.

<?php
$content_type = 'teszt';
$output = '';
$result = pager_query(db_rewrite_sql("SELECT n.nid FROM {node} n WHERE n.type = '$content_type' AND n.status = 1 ORDER BY n.created DESC"));
while ($node = db_fetch_object($result)) {
// Itt csinálsz valamit a $node-okkal, pl. egészben megjeleníted őket:
$output .= node_view(node_load(array('nid' => $node->nid)), 1);
  }
print $output;
?>
0
0
nevergone képe

Köszönöm a segítséged, pontosan ilyen válaszra volt szükségem az elinduláshoz. :)

U.i.: Kipróbáltam az általad írt megoldást, és teljesen jól használható arra, hogy az igényeim szerint átalakítsam és kibővítsem. :)

0
0
nevergone képe

Csináltam egy teszt-környezetet, ahol a CCK -val összeállított tartalomban szerepel egy field_szam nevu numerikus mezo. Az alábbi kis kóddal ki tudom listázni a mező értékét, és a node -ra mutató linket tudok rá tenni. Viszont ha több tartalmat viszek fel, csak az első 10 jelenik meg a listában (természetesen a többi is szerepel az adatbázisban, csak nem jelenik meg). Meg tudná valaki mondani, hogy miért van ez így?

<?php
$content_type = 'teszt_tartalom';
$output = '';
$result = pager_query (db_rewrite_sql ("SELECT node.nid FROM node, content_type_teszt_tartalom WHERE node.type = '$content_type' AND node.status = 1 AND node.nid = content_type_teszt_tartalom.nid ORDER BY content_type_teszt_tartalom.field_szam_value ASC"));
while ($node = db_fetch_object($result)) {
// lista elkészítése a számok alapján, linkek elhelyezése:
$node = node_load (array('nid' => $node->nid));
$output .= "<a href=\"?q=node/$node->nid\">".$node->field_szam[0][value]."</a><br>";
}
print $output;
?>
0
0
pp képe

a pager_query mint ahogyan a nevében is benne van lapokat tölt csak be, tehát az sql kérés végére oda rakja a megfelelő záradékot.

pár javaslat:
- a tábla neveket mindig tedd {} közé így akkor is fog működni a programod, ha tábla előtagokat használsz, vagy esetleg másik adatbázisban van pár táblád.
- ha db_rewrite_sql-t használsz, akkor a helyes használat 'FROM {node} n' majd a későbbiekben node.akarmi helyett a n.akarmi használata. A db_rewrite_sql lehetővé teszi ugyanis, hogy a moduloddal beépülj más modulok lekérdezésbe, vagy hogy más modulok legyenek hatással a te lekérdezéseidre (pl taxonomy_access). Ilyenkro feltételezi a rendszer, hogy a node táblára n néven hivtakozhat majd.
- db_rewrite_sql esetén ne használd a FROM tábla1, tábla2 formációt helyett inkább JOIN-t használj!
- teljesen felesleges a cikluson belül még egy node_load utasítást is kiadnod, ezzel jócskán megnövelve a feldolgozási idejét. A szükséges adatok ugyanis már ott vannak, csak a SELECT utáni részbe fel kell venni a field_szam_value oszlopot is
- csak így nem teszünk bele változót a lekérdezésbe
- link készítésére meg használd az l függvényt, ami ha be van kapcsolva a rövid webcím akkor is jól működik, no meg az aktuális linkhez is egy osztályt hozzáad. ;)

egyébként teljesen korrekt
a kód picit tupírozva:

$content_type = 'teszt_tartalom';
$output = '';
$result = db_query (db_rewrite_sql ("SELECT n.nid, cttt.field_szam_value FROM {node} n INNER JOIN {content_type_teszt_tartalom} cttt ON n.nid = ctt.nid WHERE n.type = '%s' AND n.status = 1 ORDER BY cttt.field_szam_value ASC"),$contet_type);
while ($node = db_fetch_object($result)) {
$output .= l($field_szam_value, 'node/' . $node->nid) . '<br>';
}
print $output;

pp

0
0
nevergone képe

Köszönöm a tanácsokat, igazán hasznosak. Minden általad írt függvény referenciáját elolvastam a Drupal API oldalon, így sok hasznos ismerettel lettem gazdagabb, és bátrabban kisérletezek is.
Viszont az általad javasolt példában valami nem működik (lehet, hogy nálam van a gond), a $field_szam_value változó semmilyen értéket nem kap, az empty függvény beállítatlannak jelzi, és a gettype is NULL értéket mond típusnak. Mi a hiba?

0
0
pp képe

$node->filed_szam_value lesz a helyes (tesztelni nem volt időm, elnézést)
hisz az eredmény sorokat a $node objektum tartalmazza.

pp

0
0
nevergone képe

Köszönöm a segítséget és a türelmet, így már teljesen jól működik, és ismét okosabb lettem. Végülis "csak" ez a feladat volt, aminek a megoldására nem jöttem rá, viszont nagyon jól és alaposan elmagyaráztatok mindent, lehetőséget adva a további ismeretek megszerzésére.
Szóval, köszönöm. :)

(Az utókor számára jegyzem meg, hogy ha valaki ki szeretné próbálni a kódokat, szerepel benne pár elírás: ctt.nid => cttt.nid, $contet_type => $content_type, $node->filed_szam_value => $node->field_szam_value)

0
0