We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 9680
    • 2 Posts
    Доброго времени суток!
    Пытаюсь на страницу вставить календарь, который бы работал с БД (при нажатии на день на этой же странице под календарём выдавал выборку из БД с евентами на этот день). И чтобы в админке можно было эти евенты заносить.
    Тестовый код календаря написал такой:

    <?php
    $m = (!$m) ? date("m",mktime()) : "$m";
    $y = (!$y) ? date("Y",mktime()) : "$y";
    ?>
    <table><tr>
    <td valign="top">
    <? mk_drawCalendar($m,$y); ?>
    </td>
    </tr>
    </table>
    <?
    $form = "<form name=\"f\" action=\"$SCRIPT_NAME?m=$m&y=$y\" method=\"POST\">
    <input type=hidden name=\"eventdate\" value=\"\">
    </form>";
    print "$form";
    print "Сделать выборку на $eventdate";

    //*********************************************************
    // DRAW CALENDAR
    //*********************************************************
    function mk_drawCalendar($m,$y)
    {
    if ((!$m) || (!$y))
    {
    $m = date("m",mktime());
    $y = date("Y",mktime());
    }
    /*== get what weekday the first is on ==*/
    $tmpd = getdate(mktime(0,0,0,$m,7,$y));
    $month = $tmpd["month"];
    $firstwday= $tmpd["wday"];
    $lastday = mk_getLastDayofMonth($m,$y);
    switch ($m){
    case "01":
    $mr="Январь";
    break;
    case "02":
    $mr="Февраль";
    break;
    case "03":
    $mr="Март";
    break;
    case "04":
    $mr="Апрель";
    break;
    case "05":
    $mr="Май";
    break;
    case "06":
    $mr="Июнь";
    break;
    case "07":
    $mr="Июль";
    break;
    case "08":
    $mr="Август";
    break;
    case "09":
    $mr="Сентябрь";
    break;
    case "10":
    $mr="Октябрь";
    break;
    case "11":
    $mr="Ноябрь";
    break;
    case "12":
    $mr="Декабрь";
    break;
    }
    ?>
    <table cellpadding=2 cellspacing=0 border=0 background="fon.gif">
    <tr><td colspan=7>
    <table cellpadding=0 cellspacing=0 border=0 width="100%">
    <tr><th width="20"><a href="<?=$SCRIPT_NAME?>?m=<?=(($m-1)<1) ? 12 : $m-1 ?>&y=<?=(($m-1)<1) ? $y-1 : $y ?>">&lt;&lt;</a></th>
    <th><?="$mr $y"?></th>
    <th width="20"><a href="<?=$SCRIPT_NAME?>?m=<?=(($m+1)>12) ? 1 : $m+1 ?>&y=<?=(($m+1)>12) ? $y+1 : $y ?>">&gt;&gt;</a></th>
    </tr></table>
    </td></tr>
    <tr><th width=32 class="tcell">Пн</th><th width=32 class="tcell">Вт</th>
    <th width=32 class="tcell">Ср</th><th width=32 class="tcell">Чт</th>
    <th width=32 class="tcell">Пт</th><th width=32 class="tcell">Сб</th>
    <th width=32 class="tcell">Вс</th></tr>
    <? $d = 1;
    $wday = $firstwday;
    $firstweek = true;
    /*== loop through all the days of the month ==*/
    while ( $d <= $lastday)
    {
    /*== set up blank days for first week ==*/
    if ($firstweek) {
    print "<tr>";
    for ($i=1; $i<=$firstwday; $i++)
    { print "<td><font size=2>&nbsp;</font></td>"; }
    $firstweek = false;
    }
    /*== Sunday start week with <tr> ==*/
    if ($wday==0) { print "<tr>"; }
    /*== check for event ==*/
    if (($m==date("m")) and ($d==date("d")) and ($y==date("Y"))){
    $bld="bgcolor=\"#BBBBBB\"";
    }
    else
    {
    $bld="";
    }
    print "<td $bld class=’tcell’ align=’center’>";
    print "<a href=\"#\" onClick=\"document.f.eventdate.value=’$d-$m-$y’; document.f.submit();\">$d</a>";
    print "</td>\n";
    /*== Saturday end week with </tr> ==*/
    if ($wday==6) { print "</tr>\n"; }
    $wday++;
    $wday = $wday % 7;
    $d++;
    }
    ?>
    </tr></table>
    <?
    /*== end drawCalendar function ==*/
    }
    /*== get the last day of the month ==*/
    function mk_getLastDayofMonth($mon,$year)
    {
    for ($tday=28; $tday <= 31; $tday++)
    {
    $tdate = getdate(mktime(0,0,0,$mon,$tday,$year));
    if ($tdate["mon"] != $mon)
    { break; }
    }
    $tday--;
    return $tday;
    }
    ?>

    Вот такой простой календарь.
    Может и кривенько, но на "пустом месте" работает вполне корректно ( http://studiobegemot.ru/ )
    Делаю в MODx сниппет, в котором этот код, вызываю его просто на странице, но при нажатии на любую ссылку (переключение месяца, или на число) - нужные переменные передаются не туда, или не правильно, я пока не разобрался. Короче в результате любого щёлка по ссылке мы вываливаемся на заглавную страницу...
    Я недавно начал разбираться с CMS вообще и MODx в частности. Подскажите, плиз, как решить задачку? huh
      • 18373 ☆ A M B ☆
      • 3,141 Posts
      Try english and maybe someone can help ya by actually reading your question...
        Mark Hamstra • Developer spending his days working on Premium Extras and a MODX Site Dashboard with the ability to remotely upgrade MODX and extras to make the MODX world a little better.

        Tweet me @mark_hamstra, check my infrequent blog at markhamstra.com, my slightly more frequent ramblings at MODX.today or see code at Github.
        • 2371
        • 29 Posts
        Ой как я тебя понимаю, вставлять пчп скрипты непонятного содержимого, ещё и в непонятную систему управления, жизнь учение. Может найдётся человек, не жалеющий времени, разберёт этот код в два счёта, мне этот календарь ой как нужен. Не пойму, почему в стандартном обиходе нет многих необходимых модулей, к примеру интеграция с 1C, рассылка тегов на маил, импорт тегов с удалённого сервера в тело документа... Знаю точно, для творчества она и для учения то, что надо.
        Подскажите пожалуйста, если есть время, иначе сам потрачу, гугол перетру до дыр.. Почему сторонний календарь не хочет переключать дату, а оно происходит после пересохранения сниппета? Два дня ждал, думал может что-то это сделает, но тщетно, ещё вечно можно было ждать, уверен. Могу предположить, что не имеет доступ к базе данных он.. так? Что нужно ввести в код?
          • 2371
          • 29 Posts
          Извиняюсь что сам же отвечаю на свой же вопрос. Вот нашёл тот самый сайт, о котором мечтал по ночам, не мог заснуть. В нём я наткнулся вот на это:

          Именно с помощью конструкций вида [[SnippetName]] или [!SnippetName!] мы можем делать вызовы сниппетов в любом месте своих шаблонов, чанков и даже просто на любой отдельной странице сайта.

          При этом конструкция [[SnippetName]] обозначает вызов кэшируемого сниппета, т.е. вызов динамической подпрограммы, результат выполнения которой будет подсчитан и выполнен один раз, а впоследствии при загрузке страницы, где вызывается данный сниппет, результат будет неизменным, т.к. повторный вызов сниппета уже не происходит. Таким образом, мы экономим ресурсы своего веб-сервера (а это всегда имеет очень важное значение при высокой посещаемости ресурса).

          Однако существуют ситуации, когда необходимо все время выполнять код сниппета заново и кэшировать результаты нельзя. В таких случаях используется конструкция [!SnippetName!], которая всегда заставит сниппет выполняться без кэширования. По аналогии, данная конструкция называется вызовом некэшируемого сниппета.

          Спасибо за внимание. Кстати информация взята с сайта modx.ru, вот ссылка на статьи.