Saját tartalom típus ckk-val vagy saját modullal

realdream képe

Van egy saját tartalom típusom amiben van egy -tól és egy -ig dátum.
A dátumoknak hónap nézetből is kiválaszthatónak kell lenni, ismétlődéseket kell tudni kezelni.
Pl. minden szerda 8:30-9:30 ig stb... A beküldéskor és a megjelenítéskor is egyedi adatbázis műveleteket kell végrehajtanom.

Mindezt a ckk(+date+dateapi/calendar) -val gyönyörűen meg lehet oldani, de itt nincsenek meg a saját modul előnyei.

Szerintetek melyik megoldást válasszam: ckk vagy saját tartalom típus modul.

CKK megoldás előnyei: egyszerű űrlap készítés
CKK megoldás problémái:
-A beküldéskor hogy tudom eltüntetni a title és a body mezőket, ezekre nincs szükségem, egyedi letisztult form kellene mint amilyet a saját modulban a function xxx_form(&$node)-al tudok csinálni.
-Hogy tudom a ckk-val készült tartalom típusnál kezelni form_validate, form_insert, form_update függvényeket

Saját tartalom típus modult már csináltam, az szépen működik.
De ebben az esetben nagyon bonyolut a form. A ckk mindent megcsinált javascript felugró calendart is...

Saját hook függvényeket készíthetek a ckk-val készült tartalom típusra, vagy próbáljam összeállítani a modulban a form-ot a date api alapján?

Drupal verzió: 
Illyés Edith képe

Nem ismerek minden körülményt, de én nagy valószínűséggel a CCK mellett döntenék. A cím mezőt el tudod rejteni az Automatic Node Title modullal, a body meg sem jelenik, ha a tartalomtípus beállító oldalán nem adsz meg neki labelt. A beküldő űrlapot a szokásos módon hook_form_alter()-rel tudod módosítani (saját validáló, submit függvény hozzáadása, stb.).

0
0
realdream képe

Köszönöm. Csináltam egy modult amibe betettem egy modulneve_form_alter és egy _nodeapi függvényt. Ezek szépen meg is hívódnak minden esetben.
A teaser és a body a nodetype adatbázis táblában a has_body és a has_title mezőkben kikapcsolható.

Viszont én csak az user nevét és naptárbejegyzéseket akarok tárolni.
A felhasználónak amikor be akar küldeni (create content->saját tartalom típus) egy datetime intervallumot akkor az űrlapon csak a szükséges mezőknek (dátum tól,ig) szabad jelen lenni, tehát nem szerepelhet a menu settings, az authoring information, url path settings stb..

A node.tpl.php vagy a node-nodetype-field.tpl.php-ban tudom a beviteli form-ot kezelni vagy a form_alter függvényben kell ez egész tömböt módosítanom úgy, hogy csak a megfelelő mezők maradjanak?

0
0

-------------------------------
http://www.realdream.hu

eMeLA képe

Hozz létre egy teszt felhasználót, és állítsd be a csoport jogosultságokat.
A uid=1 -nek minden form elem megjelenik...

0
0

...mit tudok: http://web.termuves.hu

realdream képe

Tehát ha az uid#1 akkor csak a ckk-ban definiált mezőket mutatja a form.
Köszönöm, hogy szóltál. Így nem kell a $form tömbbel bajlódnom.

0
0

-------------------------------
http://www.realdream.hu

eMeLA képe

Nem nem. Vannak felhasználók és felhasználói csoportok. A felhasználókat csoportokhoz kapcsolhatod. A csoportoknak pedig jogosultságokat adhatsz. A jogosultságok függvényében lát, vagy nem lát valamit a csoport tagja. Egyedül az uid=1 lát mindent.
Egy node beküldésénél az egyes elemeihez, és gruppjaihoz jogosultságok tartoznak. Ha van a csoportnak jogosultsága hozzá akkor látja, ha nem nem.
?q=admin/user/roles
?q=admin/user/access
Illeve a saját adatok lapon kapcsolhatsz egy felhasználóhoz jogosultságot
?q=user

0
0

...mit tudok: http://web.termuves.hu

realdream képe

Értem én. Amit írtam azt a ckk-ban nem szereplő egyéb az egyedi tartalomtípushoz nem szükséges mezőkre gondoltam. Pl. Authoring information, Publishing options stb...

A ckk-ban megadott mezőket content_permissions module címszó alatt találom pl. a
Home › Administer › User management > Permissions menüpontban, ahogy írtad.

0
0

-------------------------------
http://www.realdream.hu

aboros képe

hozz létre magadnak egy teszt felhasználót és próbáld ki.
uid1 különleges felhasználó, ha igazán precízek akarunk lenni, akkor őt nem is használjuk soha semmire, csak modulok, jogosultságok adminisztrálására és update-hez. másra nem.

az authoring information és a publishing options akkor látszik egy beküldő űrlapon, ha a bejelentkezett felhasználó (olyan csoportba tartozik aminek) van olyan joga, hogy "adminster content" (tartalmak adminisztrációja) .. (akinek ilyenje van, az pl beküldhet bármilyen tartalomtípust is)

a menü settings csak olyanoknak látszik, akik rendelkeznek "menü adminisztrálása" jogosultsággal.

és még vannak űrlaprészek, amik jogosultságokhoz kötöttek.

mások meg nem, pl a taxonomy űrlaprész nem kötődik semmilyen jogosultsághoz magától, de erre csinálhatsz saját modulodban megoldást a form_alterrel..

(hogy az egyes tartalom típusok használjanak e "törzs" mezőt vagy nem, azt nem az adatbázisban kell áthekkelni, mint általában semmit se, hanem a tartalom típus szerkesztésekor van egy olyan szövegmező, hogy törzs mező címe, alatta ott is a szép magyarázat, hogy a törzs mező elhagyásához üresen kell azt a szövegmezőt hagyni és kész)

0
0

-
clear: both;

realdream képe

Elolvastam és minden érthető, szépen összefoglaltad a működést.
Viszont a problémám még mindig fenn áll.

Én nem csak felhasználóhoz akarom kötni a mezők megjelenítését a form-on, hanem tartalom típushoz is.

Tehát pl. pathauto:
-A story és page (írás és oldal) tartalom típusokban meg kell adnom a tartalom beküldőnek a lehetőséget a URL path settings mező változtatására.
-A saját tartalom típusban, (ahol egy dátum intervallumot kell neki beküldeni, amit majd egy naptárban kell megjelenítenem) ott nem szabad kérnem tőle az URL path settings útvonalat. Itt nincs semmi másra szükség csak felhasználó nevét és dátumot kell tárolnom az adatbázisban.

0
0

-------------------------------
http://www.realdream.hu

eMeLA képe

Tehát pl. pathauto:
-A story és page (írás és oldal) tartalom típusokban meg kell adnom a tartalom beküldőnek a lehetőséget a URL path settings mező változtatására.

És ezt miért kell ? A pathauto pont arra van, hogy ne a felhasználó adja meg path aliast...

-A saját tartalom típusban, (ahol egy dátum intervallumot kell neki beküldeni, amit majd egy naptárban kell megjelenítenem) ott nem szabad kérnem tőle az URL path settings útvonalat. Itt nincs semmi másra szükség csak felhasználó nevét és dátumot kell tárolnom az adatbázisban.

Ha felteszel egy alap drupal-t, és csinálsz egy teszt felhasználót. Engedélyezed, hogy küldjön be egy page-et, akkor ott csak a cím és egy szövegmező jelenik meg. Ha felteszed a CCK-t és a Date modult. A tartalom mezőt kikapcsolod, és kreálsz egy date mezőt, akkor csak a cím és a date fog megjelenni. (ha mégse akkor azt le kell tiltani).

0
0

...mit tudok: http://web.termuves.hu

aboros képe

dátumot tárolod az adatbázisban, kivéve, ha mindent a saját modulod intéz, az ő saját táblájával, de ekkor meg ne a nevét, hanem inkább az idjét használd a felhasználónak tároláskor. :) minden nodenak minimum van címe, (max valamilyen generált cím, de $node->title mindig van, meg beküldő is, meg beküldés dátuma, meg.. más nem jut eszembe)

a saját modulokban az a szép szerintem többnyire, legalábbis én általában olyanokat írok, hogy inci-finci kis apróságokat módosítanak néhány tucat sorral a drupalon, hogy az jobban simuljon a feladathoz. újrahasznosításra nemigen alkalmasak, az adott feladatra szabnak valamit. nem komplett funkciókat kell megvalósítani arra többnyire vannak kontrib vagy core megoldások, azokat érdemes használni és beleszólni a működésükbe ilyen minimodulokkal.

elég egyszerű egy modult írni szerintem, ami a tac lite -ra épülve, form_alter-ben kiszedi azokat a galéria kategóriákat a taxonómia űrlapelem galéria választólistájából, amikhez adott usernek (rolenak) nincs joga megtekintésre és akkor máris nem tud oda ő beküldeni se. (azt nem tudom, hogy ez mennyire biztonságos, talán nem az, mert a megjelenítéskor rejtem el az lehetőségeket, amik viszont ki lettek küldve, tehát végülis elfogadhatók válasznak, ha jól értem a form apit. ebben az esetben ahah megoldás kell.. amit még semennyire nem értek:D)

0
0

-
clear: both;

realdream képe

Azt hittem, hogy van egyszerűbb megoldás arra, hogy a többi tartalomtípustól független a saját tartalom típusban csak a szükséges mezők jelenjenek meg a beküldő form-on. Ez sokszor szükséges lehet, mivel a d6-ban ugye mindent tartalomként kezelünk.
Pl. webáruház cikk rekord, itt sem kell semmi más csak a csz,megnevezés, ár stb...
PHP-ban teljesen egyszerűen lehet készíteni egy form-ot amit eltárolunk egy adatbázis táblában, viszont akkor megint nem lesz integrálva a drupálba, ami megint egy csomó feladatot hoz magával (pl. keresés, admin által szerkeszthető ürlap stb...)

0
0

-------------------------------
http://www.realdream.hu

aboros képe

az api.drupal.org -on mindent meg tudsz tanulni amit neten keresztül erről tudni lehet, a többit az idő fogja megtanítani.

minden űrlap, amivel a drupalban találkozol a formAPI segítségével állítódik elő. szép magyar mondat. bármelyiket tetszés szerint módosíthatod egy saját modulban a hook_form_alter() segítségével.

0
0

-
clear: both;

realdream képe

Már nézegetem egy ideje, pár dolgot kis is próbáltam már, de az api megtanulása nem 5 perces dolog...
Egyébként nem bántam meg, hogy a drupalt választottam, amikor tartalomkezelő rendszert kerestem. Amint jobban belemerül az ember annál érdekesebb. Rendkívül jól személyre szabható rendszer, ha mást választottam volna, akkor már nagy bajban lennék bizonyos egyedi feladatoknál.

0
0

-------------------------------
http://www.realdream.hu

Pasqualle képe

többi tartalomtípustól független a saját tartalom típusban csak a szükséges mezők jelenjenek meg a beküldő form-on
...
Pl. webáruház cikk rekord, itt sem kell semmi más csak a csz,megnevezés, ár stb...

minden tartalomtipushoz mas CCK mezoket keszitesz, tehat csak azok a mezok jelennek meg a bekuldo formon amiket az adott tipushoz elkeszitettel. Mas tartalomtipusok mezoit nem fogod latni..

az utvonal (path) mezo rossz pelda volt, mert minden nodenak van utvonala, es nem igazan logikus ennek megjeleniteset node tipus alapjan szabalyozni.. Ha te megis ezt akarod akkor ahogy masok is ajanlottak a hook_form_alter() jo megoldas..

meg egy erdekes fuggveny amit ajanlok ha a node bekuldo form-ot szeretned csinositani, az a theme_node_form(). Ezt felulirhatod a sajat sminked template.php fajljaban.

0
0
realdream képe

Ez nagyon jól hangzik, valószínű pont ezt kerestem.

mi legyen a függvény neve a template.php-ben?
A theme_node_form()-ra azt mondja, hogy cannot redeclare.

0
0

-------------------------------
http://www.realdream.hu

Pasqualle képe

sminknev_node_form()

de nem igazan ezt kerested, mert ez arra valo hogy a megjelenitest variald, mas sorrend a mezoknek es gomboknak, tobb css class, stb. Neked az volt a kerdesed, hogy ki lathat egy adott mezot, ami jogosultsagot jelent, es azt nem illik a smink fuggvenyben kezelni..

0
0
realdream képe

Nem az volt a kérdésem, lásd a nyitó hozzászólást.

Egy saját tartalom típusnál a beküldő formnak letisztultnak kell lenni, tehát csak egy dátum intervallum látsszon semmi más. A felhasználók egy dátum intervallumot adnak meg, hogy mikor érnek rá. Ez lehet hetente többször is. Ezeket a konkrét dátumokat kell beküldeni, majd lekérdezni felhasználónként, valamint olyan naptárat, ahol a naptárban látszanak a felhasználó nevek a megfelelő helyen. A többi adat a felhasználóhoz tartozó profilban lesz tárolva.
Csinálok saját modult, csak a dátum intervallum mező nagyon bonyolult, a dateapi-t használja mindenféle felugró havi widget, meg ismétlődés stb... Most 280 sornál tartok a modullal....

0
0

-------------------------------
http://www.realdream.hu

Pasqualle képe

hisz Edit mar az elso hozzaszolasban valaszolt, hogy ez siman mukodik CCK-val es minden mas mezo eltuntetheto..

csinalsz egy sajat tartalomtipust, a body mezo nevet kitorlod, mivel az nem kell
teszel hozza ket CCK datum mezot
Automatic Nodetitles modullal a node cimenek megadod a felhasznalo nevet, vagy barmit amit gondolsz, es egyben elrejted a title mezot a node bekuldes formrol.

megnezed a node bekuldes formot egy olyan felhasznaloval aki nem a user 1. Mi az amit latsz a ket datum mezon (es a 3 gombon) kivul? Jo talan a "preview" gombot el lehetne tuntetni a theme_node_form()-mal, mert az ezen a tartalom tipuson tenyleg tulzas (es ezt nincs lehetoseg tartalom tipusonkent szabalyozni), de en mast nem latok..

0
0
realdream képe

Bekapcsolt moduloktól és jogosultságoktól függ, hogy még mi látszik: pl. Comment settings, Authoring information, Publishing options stb...
A felhasználó pl. egy írás típusú tartalomnál a pathauto beállításokat keresőoptimalizálás céljából felülírhatja (ha ez a kérése), a kommenteket is kérheti, hogy ő tudja tartalmanként engedélyezni, a közzétételt is akarja állítani (pl. most megírja a cikket, majd holnap teszi közzé v. címlap stb...)
Tehát a felhasználótól nem vonhatom meg a jogot ezen funkciók elérésére, mert más tartalomtípusoknál használja azokat.
Pl. A comment modul is saját formot készít, ami egy user1-nél is csak a szükséges mezőket tartalmazza. Ezt kell nekem is csinálni vagy theme_node_form()-ot valahogy beüzemelni, de ott már az összeállított $form tömb van.

0
0

-------------------------------
http://www.realdream.hu

Pasqualle képe

az egyik falhasznalonak engedelyezed, hogy beallithasson commentet az o node-jahoz a masiknak meg megtiltod? nem logikus szerintem.. a comment is tartalomtipusonkent allithato, tehat kapcsold ki a te tartalom tipusodra es nem lesz..

az Authoring information es Publishing options dologban igazad van. Nem jo, hogy ezek egyetlen jogosultsaghoz kacsolodnak minden tartalom tipusnal.. Arra tenyleg jo lenne egy olyasmi modul amit pp irt Blog Aid, hogy az adott tartalom tipusnal megoldja a kesobbi kozzetetelt ket uj jogosultsagot hasznalva..

0
0
realdream képe

Írok egy egyszerű példát a hook_form_alter()-ben a drupal form api #access használatára:

Funckió: a story (írás) típusú tartalmakban eltünteti a Publishing options, Authoring information elemeket és Preview gombot.

CKK esetén a hurkot a CKK field group modultól súlyosabbra állítjuk:

function sajatmodulneve_update_1() {
   $items = array();
   $items[] = update_sql("UPDATE {system} SET weight = 10 WHERE `name` =   'sajatmodulneve';");
   drupal_set_message('Updated custom module weight.');
   return $items;
}   

A form_alter használata:

function sajatmodulneve_form_alter(&$form, $form_state, $form_id) {
   if (isset($form['type']) && $form['type']['#value']=="story") {
      $form['author']['#access'] = FALSE;
      $form['options']['#access'] = FALSE;
      $form['buttons']['preview']['#access'] = FALSE;
  }
}

Köszönöm mindenkinek a segítséget.
0
0

-------------------------------
http://www.realdream.hu

Pasqualle képe

a biztonsag kedveert beletennek egy ellenorzest, hogy tenyleg jo formot modositok e

if (isset($form['#id']) && $form['#id'] == 'node-form') {
0
0