nette Event kalendar jak na nej?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
zdrhal
Člen | 42
+
0
-

Zdravim vsechny,
nevi nekdo kde sehnat plne funkcni a dobre zdokumentovany event kalendar. Nebo pomoci jak rozbehat EventCalendar. At delam co delam nedokazu rozbehat ani jedno demo, dokumentace k tomu neni (nefunkcni link). Jedine co se mi povedlo je rozbehat tu zakladni verzi kalendare, kdy se me vypise obycejny kalendar. Ale ja bych chtel rozchodit pridavani Eventu a to me hazi jednu chybu za druhou. Strasne by pomohlo kdyby nekdo nekde mel jeste dokumentaci, protoze link od Kubicka nefunguje. Diky..

Editoval zdrhal (4. 4. 2014 13:59)

Grelek
Člen | 233
+
0
-

Já jsem to nedávno taky řešil. Nakonec jsme použili jenom EventCalendar\Simple, nad kterým jsme postavili vlastní „obálku“ tak, aby nám to fungovalo. Bylo to ale dost hackování a nejlíp z toho asi vyjdeš, když si napíšeš svůj…

zdrhal
Člen | 42
+
+1
-

Jojo na to uz jsem taky prisel uplne jsem se na to vykaslal a zahodil to a udelal si svuj kalendar :) Vzhledem k tomu ze mam i svoje metody pro praci s db tak si to aspon rovnou udelam tak jak potrebuji. Ale doufal jsem ze to bude funkcni.

Muj kalendar:

model:

<?php

namespace App\Model;

use Nette;

class Calendar extends Nette\Object
{

  private $month;
  private $year;

  public function __construct()
  {
  }

  // funkce nastaví mesic
  function setMonth($month)
  {
    $this->month = $month;
  }

  // funkce nastavi rok
  function setYear($year)
  {
    $this->year = $year;
  }

  // funkce vrati nazvy dnu
  function getDays()
  {
    return array(1 => "Pondělí", "Úterý", "Středa", "Čtvrtek", "Pátek", "Sobota", "Neděle");
  }

  // funkce vrati mesice
  function getMonths()
  {
    return array(1 => "Leden", "Unor", "Brezen", "Duben", "Kveten", "Cerven", "Cervenec", "Srpen", "Zari", "Rijen", "Listopad", "Prosinec");
  }

  // funkce vrati pocet dnu
  function countDays()
  {
    return cal_days_in_month(CAL_GREGORIAN, $this->month, $this->year);
  }

  // nastaveni prvniho dne v kalendari
  function firstDay()
  {
    $eng = date("w", mktime(0, 0, 0, $this->month, 1, $this->year));
    return ($eng==0) ? 7 : $eng;
  }

  // nastaveni bunky v kalendari
  function cell($row, $column, $firstDay, $countDays)
  {
    $days = $this->getDays();

    if ($row ==1 ) return $days[$column];

    $value = ($row-2)*7 + $column - $firstDay+1;

    if ($value < 1 || $value > $countDays) return "&nbsp;"; else return $value;
  }

  // vrátí pole ve kterém je nadefinovaný kalendář
  function extractCalendar()
  {
    $months = $this->getMonths();
    $countDays = $this->countDays($this->month, $this->year);
    $firstDay = $this->firstDay($this->month, $this->year);
    $countRows = date("W", mktime(0, 0, 0, $this->month, $countDays-7, $this->year)) - date("W", mktime(0, 0, 0, $this->month, 1+7, $this->year))+4;

    for ($row = 1; $row <= $countRows; $row++)
    {
      for($column = 1; $column <= 7; $column++)
      {
          $extractCalendar[$row][$column] = $this->cell($row, $column, $firstDay, $countDays);
      }
    }
    return $extractCalendar;
  }

}

presenter:

	/** @var Model\Calendar */
	private $calendar;

	public function __construct(Model\Calendar $calendar)
	{
		$this->calendar = $calendar;
	}

	public function renderDefault()
	{
		$this->calendar->setMonth(Date('n'));
		$this->calendar->setYear(Date('Y'));
		$this->template->calendar = $this->calendar->extractCalendar();
	}

Sablona:

<table class="calendar">
  <tr>
    <th colspan="7">Kalendář</th>
  </tr>
  {for $i = 1; $i <= count($calendar); $i++}
  <tr>
    {for $j = 1; $j <= 7; $j++}
      {if $i == 1}
        <th>{$calendar[$i][$j]}</th>
      {else}
        {if $calendar[$i][$j] == "&nbsp;"}
          <td class="free">&nbsp;</td>
        {else}
          <td>{$calendar[$i][$j]}</td>
        {/if}
      {/if}
    {/for}
  </tr>
  {/for}
</table>

Třeba se to nekomu bude hodit :) Preju hezky den.

EDIT: Je tam nekde mala chybka. Behem par hodin to fixnu a upravim. ;)

EDIT2: Chyba nalezena ted je to plne funkcni :)

Editoval zdrhal (5. 4. 2014 22:40)

zdrhal
Člen | 42
+
0
-

ADD Tento kalendar ukazuje jen aktualni mesic. Pro prochazeni mesicu je treba si s nim dale pohrat.