hook_validate és állapot

Patuzzi képe

Honnan tudom a hook_validate-ben, hogy épp inserting, updating vagy deleting van-e?
A $node->nid és $node->op alapján rá lehet jönni, de abban magyarul vannak a szövegek.

Nincs valami $state vagy valami hasonló változó?

Így mégsem illik:

if ((!$node->nid) && ($node->op == t("Mentés"))) {
  ... inserting ...
} elseif (($node->nid) && ($node->op == t("Mentés"))) {
  ... updating ...
} elseif (($node->nid) && ($node->op == t("Törlés"))) {
  .. deleting ...
}
Drupal verzió: 
Pasqualle képe

sima formnal a

if ($form_state['clicked_button']['#id'] == 'edit-delete') {

de a hook_validate-ben nincs ilyen lehetoseg, es nem is latok jobb megoldast annal amit irtal..
a hook_nodeapi-ban van meg egy 'validate' opcio de az az osszes node tipusra meghivodik..

off: miert vannak magyarul a szovegek? t('Save') lenne helyesen..

0
0
Patuzzi képe

>off: miert vannak magyarul a szovegek? t('Save') lenne helyesen..

Azt hiszem tényleg a t('Save') a helyes.
Csak kilistáztam a $node objektumot és így volt benne.
A t('Save') akkor minden nyelvnél fog működni?

0
0
Patuzzi képe

hogy tudjuk, mi a validate funkciója:
- insert: van-e már ilyen adatunk (unique), vagy kell-e szülő rekordnak lenni (foreign key)
- update: új adat egyezik-e egy másik rekorddal, de nem lehetne (unique), vagy új adathoz kell-e szülő rekordnak lenni (foreign key)
- delete: van-e rá hivatkozás (foreign key)
stb.

De ennek hiján marad ez a függvény:

function _modul_form_allapot($nid, $op) {
  if ((!$nid) && ($op == t("Save"))) {
    return "I";   -- Inserting
  } elseif (($node->nid) && ($node->op == t("Save"))) {
    return "U";   -- Updating
  } elseif (($node->nid) && ($node->op == t("Delete"))) {
    return "D";   -- Deleting
  }
0
0
hosszu.kalman képe

Nem látom a $node objektumot.

Gondolom azért van a paraméterben a $nid és az $op, hogy azokat használjuk, és a $node-nak különben sincs op tulajdonsága.

0
0
Patuzzi képe

>és a $node-nak különben sincs op tulajdonsága.
De van a form submit után: "Mentés" ill. "Törlés" (ami a gomb értéke)

Így használom (csak fejből):
(hook helyett értelemszerűen modul neve van)

function hook_validate($node, &$form) {
  if (_hook_form_allapot($node->nid, $node->op) == "I") {
     ... Inserting ...
  }
  if (_hook_form_allapot($node->nid, $node->op) == "U") {
     ... Updating ...
  }
  if (_hook_form_allapot($node->nid, $node->op) == "D") {
     ... Deleting ...
  }
}
 
function _hook_form_allapot($nid, $op) {
  if ((!$nid) && ($op == t("Save"))) {
    return "I";   -- Inserting
  } elseif (($node->nid) && ($node->op == t("Save"))) {
    return "U";   -- Updating
  } elseif (($node->nid) && ($node->op == t("Delete"))) {
    return "D";   -- Deleting
  }
}
0
0
hosszu.kalman képe

Értem én, hogy saját fgv, csak olyan változóra hivatkozol benne ami nem létezik. Nem adsz át $node objektumot, így nincs semmilyen tulajdonsága. Ezt akartam jelezni. Nézd meg:

<?php
function _hook_form_allapot($nid, $op) {
  if ((!$nid) && ($op == t("Save"))) {
    return "I";   -- Inserting
     // Honnan kerul ide a $node amikor csak $nid es $op valtozod van a fgv-en belul?
  } elseif (($node->nid) && ($node->op == t("Save"))) {
    return "U";   -- Updating
  } elseif (($node->nid) && ($node->op == t("Delete"))) {
    return "D";   -- Deleting
  }
}
?>

Mondjuk őszintén szólva nem értem mi funkciója van a fgv-ednek. Miért éri meg jobban ezt használni

<?php if (_hook_form_allapot($node->nid, $node->op) == "D") ?>

mint ezt
<?php if (($node->nid) && ($node->op == t("Delete"))) ?>

Nem kötekedni akarok, csak tényleg érdekel, lehet én siklok el valami felett.

0
0
Patuzzi képe

>Értem én, hogy saját fgv, csak olyan változóra hivatkozol benne ami nem létezik.
Miért nem létezik?
Átadom a $node->nid és $node->op értékeket, de $nid és $op-ként veszem át.
Akkor miért nem lehet használni a $nid és $op változókat függvényen belül?

>Mondjuk őszintén szólva nem értem mi funkciója van a fgv-ednek. Miért éri meg jobban ezt használni
Ebben lehet, hogy igazad van, hogy mindegy.
De én megszoktam, ha valamit több helyen használok, azt függvénybe teszem a későbbi, akár máshonnan, más értékekkel való híváshoz.
Ha később kiderül, hogy nem lenne a függvényen belüli vizsgálat megfelelő, akkor csak egy helyen kell átírni.

>Nem kötekedni akarok, csak tényleg érdekel, lehet én siklok el valami felett.
Természetesen nem. Én is szeretnék mindig minden oldalról tájékozódni, alternatívákat megnézni,
és érdekel más gondolkodásmódja is.

0
0
hosszu.kalman képe

Azért nem létezik, mert nem azokat a változókat használod, amiket átadsz.

Te az $nid és az $op változókat adod át, mégis a $node->nid és a $node->op értékekre hivatkozol a fgv-en belül.

Ezeket kellene lecserélni valahogy így:

<?php
function _hook_form_allapot($nid, $op) {
  if ((!$nid) && ($op == t("Save"))) {
    return "I";   -- Inserting
     // Innen szedtem ki a $node objektumra torteno hivatkozasokat
  } elseif (($nid) && ($op == t("Save"))) {
    return "U";   -- Updating
    // Meg innen
  } elseif (($nid) && ($op == t("Delete"))) {
    return "D";   -- Deleting
  }
}
?>

Remélem így már érthető amit írtam.

0
0
Patuzzi képe

Bocs, teljesen igazad van, elkerülte a figyelmemet a 2. és 3. feltétel vizsgálat, csak az 1-t írtam és néztem át, a többi úgy maradt.
Mentségemre szolgáljon, hogy csak adhoc beírtam és nem copy-paste volt egy modulomból...

A fgv-hívás értelme vagy értelmetlensége pedig csak egy apró véleménykülönbség.

0
0