dátum ciklusok + összege

dorion képe

Sziasztok !

Van egy nagy problémám, szükségem lenne az event repeter szerű működésre.

Az alap koncepció:

engedélyez/tílt ---> dátumra/időszakra -> időpontok

tehát egy bizonyos időszkara vagy dátumra engedélyezem vagy tíltom a megadott időpontokat.

Hogy érhetőbb legyen ez egy buszjárat menetrendje, ami mondjuk nyárom sűrűbb és más-más időpontokban jár, míg télen mondjuk ritkábban vagy nem is jár.

Nem teljes megoldást várok az mindenképp az én dolgom csak kifogytam az ötletekből.

Az lenne a jó ha meg lehetne adni egy bár byteos formulával az egészet, amit aztán a form genráláskor meg etetek egy függvénnyel az meg vissza köpi az összes lehetséges dátumot.

Amire ddig jutottam:
ha tudnék ilyen formulákat írni, akkor legenerálnám az összes formula értékét egy-egy tömbe, majd a tömbök metszetével ill. uniojával megkapnám a végső tömböt ami a végeredmény.

Igazából a formula nem fontos minden más egyébb javaslatott elfogadok.

Illyés Edit képe

Mivel nem teljes megoldást vársz, ezért csak egy ötlet, hogy merre lehetne elindulni:

CCK tartalomtípusok (mondjuk "buszjárat" mint egyik tartalomtípus), CCK Date kiegészítő modul, CCK Computed Field kiegészítő modul.

Egyébként szép feladat, ha megoldottad, leírhatnád, hogyan csináltad :)

0
0
dorion képe

Köszönöm, de a CCK sajnos nem jó a számomra, mivel ott csak tartalmakat lehet egy másikhoz rendelni, de nekem jóval összetettebb feladatot kellene, megoldani mit amire az a modul képes :-(

A Date API sem jó nekem mivel abban sem lehet felparaméterezni a dátum formokat, hogy csak egy bizonyos értékeket vegyenek fel .-(

Ám egyenlőre még azok a bizonyos értékek legenerálásával gyűlik meg a bajom :-(

0
0
Illyés Edit képe

de nekem jóval összetettebb feladatot kellene, megoldani mit amire az a modul képes

A CCK szerintem tökéletesen alkalmas a feladat megoldására.

0
0
aries képe

Igen, de szerintem érdemes létrehozni egy külön mezőtípust, ami letárolja az egyes dátumokat + a hozzájuk tartozó időszakot, és ezeknek a számát automatikusan lehet növelni. Mentéskor lenne egy külön tábla, ami a dátumokat összekapcsolja a megfelelő nid-del. Az egészben a jóság, hogy ha CCK-t használsz, akkor automatikusan minden mezőhöz létrehoz egy views filtert is, és az alapján könyebben tudsz szűrni az időszakokra.

Ha nem vagy jártas a CCK programozásában, akkor szerintem egy node típust tartalmazó modullal előbb végzel.

Aries
http://aries.mindworks.hu

0
0
dorion képe

Az egyes dátumok és időpontok minden egyes járatnál más és más, ezért azokat mindenképp a form generálásakor kell legenerálnom, hacsak nem php scriptet szúrok be egy node-ként de ezt sajnos nem tudom hogyan tudnám felparaméterezni egy másik node mezőértékével .-(

A másik meg hogy ezt a megrendelő szeretné állítgatni (mármint az idő intervalumokat), de nem tud phpul:-)

A teljes feladat az lenne hogy:

Felhasználó látja:
1, kiválasztja honnan megy
2, hova ez a lista ügye függne az elöbbitől
3, majd ezek alapján kiderülne hogy melyik járattal mene (ezt sem tudom még egyértelműen meghatározni, hiszen az elöbbi két állomás szerepelhet több járatban is :-( ), generálódna az indulás lehetséges időpontjai a járathoz dendelt dőpontok szerint :-)
4, majd ha vissza útra is megváltja a jegyet akkor a lehetséges időpőntokat is le kell generálni (ill. ezek biztosan legnerálódnak csak vagy elrejtem vagy nem )
5, ha ezeken túlestünk a jegyek típusainak a számát kell beállítaina a felhasználónak, ami ugyan csak a járathoz van rendelve, amitből aztán árat is kellen a generálnom
6, egykét egyébb info tárolása

Felhasználó nem láthatja:
- kezelnem kellene minden megrendelést hogy a státusa változtatható legyen
- majd listázhatóak legyenek a megrendelések időpont szerint, járatoknként csoportosítva
- le kell korlátoznom, hogy egy időpontra, csak bizonyos mennyiségű megrendelést fogadjon el a rendszer (aminek az értéke ugyancsak beállítható legyen, ezt még azt sem tudom mihez rendeljem)
- felhasználóktól függő kedvezmény rendszer

Elképzelni se tudom hogy ezeket hogyan tudnám a CCK segítségével megcsinálni (már mint az egészet mert az egyes részeket meg is csináltam próbából de az nem elég), tudom hogy ha beletudnám erőszakolni egy nódba az egészet akkot a többit views, workflow segítségével elég egyszerűen meg tudnám oldani.

0
0
Illyés Edit képe

Szerintem az a gond, hogy mindenáron egy node-ba akarod beleerőszakolni az összes információt. Pont fordítva kellene gondolkodni – annyi tartalomtípust készíteni, ahány féle tartalommal dolgozol: járat, állomás, hét napja (hétfő, kedd, stb.), napszak (reggel, délelőtt, stb.). Ezeket pedig node reference segítségével rendelni egymáshoz.

Ha a felhasználó szeretne pénteki napon reggel 9 és 12 között Nyíregyházáról Budapestre menni, akkor lekéred azokat a járat node-okat, amelyek hozzá vannak rendelve a Nyíregyháza, Budapest, péntek, délelőtt című node-okhoz (és ahol a nyíregyházi időpont korábbi, mint a budapesti, tehát a járat Nyíregyházáról megy Budapestre és nem fordítva).

Esetenként a node-okat lehet kategóriákkal is helyettesíteni, pl. "péntek" lehet egy egyszerű Drupal kategória is – hogy kategória, nézet, vagy node kell neked, az attól függ, hogy a péntek csak így önmagában egy címke, vagy egy összetett adatforma, aminek több mezője kell legyen.

0
0
dorion képe

A saját megoldásaom a saját kérdésemre nem tökéletes még és biztos lehet és kellene finomítani, de működik :-)

$formulas[] = array(
                'pass'  => TRUE,
                'dates' => array(
                                'start_date'  => '',
                                'end_date'    => '2007-05-30',
                            ),
                'days'  => array(
                                'Mondays'    => 1,
                                'Tuesdays'   => 1,
                                'Wednesdays' => 1,
                                'Thursdays'  => 1,
                                'Fridays'    => 1,
                                'Saturdays'  => 0,
                                'Sundays'    => 0,
                            ),
                'times' => array(
                                0 => '00:00',
                                1 => '01:10',
                            ),
            );
$formulas[] = array(
                'pass'  => FALSE,
                'dates' => array(
                                'start_date'  => '2007-05-20',
                                'end_date'    => '2007-05-28',
                            ),
                'days'  => array(
                                'Mondays'    => 1,
                                'Tuesdays'   => 0,
                                'Wednesdays' => 0,
                                'Thursdays'  => 0,
                                'Fridays'    => 0,
                                'Saturdays'  => 0,
                                'Sundays'    => 0,
                            ),
                'times' => array(
                                0 => '00:00',
                                1 => '01:10',
                            ),
            );
 
function valid_timestamps($formulas){
 
  $valid_dates = array();
  foreach($formulas as $formula){
 
    if(isset($formula['dates']['start_date']) AND !empty($formula['dates']['start_date'])){
      if(time() < strtotime("18:00-00:00")){
        $start_date = $formula['dates']['start_date'] . '00:00-00:00';  
        $start_date = strtotime($start_date);
      }
      else{
        $start_date = $formula['dates']['start_date'] . ' 23:59-00:00';  
        $start_date = strtotime("$start_date");
      }
    }
    else{
      $start_date = date('Y-m-d G:i',time());
      $start_date[15] = 0;
      $start_date = strtotime($start_date);
    }
 
    if(isset($formula['dates']['end_date']) AND !empty($formula['dates']['end_date'])){
      $end_date = $formula['dates']['end_date'] . '-23:59';  
      $end_date = strtotime($end_date);
    }
    else{
      $pre_book = variable_get('booking_system_max_prebook', 12);
      $end_date = strtotime("+$pre_book month 23:59");
    }
 
    $count = $start_date;
    $timestamps = array();
    $week = 0;
    while($count <= $end_date){
      foreach($formula['days'] as $day => $value){
        if($value === 1){
          foreach($formula['times'] as $time){
            #print $date = strtotime($date). '<br>' ;
            $date = gmdate('Y-m-d',strtotime("+$week week $day",$start_date)).' '.$time.'-00:00';
            $timestamps[] = gmdate('Y-m-d l H:i',strtotime($date));
          }  
        }
      }
 
      $count = strtotime("+$week day",$start_date);   
 
      $week++;  
    }
    if($formula['pass'] == TRUE){
      $valid_dates = array_merge($valid_dates, $timestamps);  
    }
    else{
      $valid_dates = array_diff($valid_dates, $timestamps);
    }
   print_r($timestamps);
 
  }
  $valid_dates = array_unique($valid_dates); 
 
  return print_r($valid_dates);
}

A valid timestamp-ek adja vissza amivel egy select inputot simán felehet paraméterezni és az adatbázisban is kényelmesebb a tárolása.

0
0