Witam!
Muszę się zwrócić o pomoc do forumowiczów zaawansowanych w JS i PHP. Używam razorCMS opartego na plikach tekstowych, lubię to dla zasady, nie stosując nigdzie gdzie nie trzeba MySQL.
Ostatnio chciałem dodać do tego CMS'a moduł z rezerwacją spotkań, w oparciu o kod Fullcalendar:
https://fullcalendar.io/docs
Mój problem polega na tym, że bardziej zaawansowani programiści tworzą połączenie MYSQL dla tabelki z danymi, kodu JS i PHP.
Adaptowałem taki moduł do razorCMS'a w oparciu o MYSQL i kod taki działa, kalendarz się w razorCMS wyświetla - ale korzysta z bazy MySQL.
Jednak w ramach pasji unikania MySQL'a postanowiłem zmienić tabelę danych, by te pochodziły z plikowej bazy danych - krótko mówiąc, z pliku tekstowego. W tym celu używam z powodzeniem Flat File Database o nazwie Flinstone - opisanej tutaj:
http://www.xeweb.net/2011/07/14/flintstone-a-...alue-database-store-using-flat-files-for-php/
Stworzyłem więc moduł do razroCMS'a, gdzie w ścieżce:
blade_packs/system_fullcalendar.php uruchamia się mój moduł.
Działanie modułu polega na tym, że gdy w tekscie na stronie przeznaczonej na terminarz, znajdzie łańcuch znaków:
in-page-blade(fullcalendar)
to usuwa ten łańcuch i zastępuje go tym co chcę.
Linia $event = displayfullcalendar(); to wywołanie funkcji rysującej kalendarz na stronie.
Problem mój dotyczy tego, że gdy działa MySQL i przekazywany jest kod wywołujący kalendarz:
to woła on plik load.php, gdzie następuje połączenie z bazą MySQL, pobranie tabeli z eventami, a następnie przez polecenie:
echo json_encode($data);
dane te są ładnie wyświetlanie w terminarzu spotkań.
Plik load.php wołany ze skryptu wygląda tak:
Jeśli jednak tylko dopiszę z przodu inny kod php, np. require_once('flatdatabase.php');
a chciałbym by działał z kodem bez MySQL'a:
znika połączenie z MySQL, dane się nie wyświetlają - kalendarz jest pusty i nie wiem, jaka to przyczyna. Dodanie tego pełnego kodu PHP by utworzyć tablicę z danymi również nie skutkuje jej wyświetleniem - rysuje się kalendarz już bez danych. Dane wyrzucane z tabelki są JSON moim zdaniem.
Zrobiłem też inne podejście z innym podobnym skryptem do fullcalendar - w nim wyrzuca mi dane z tablicy nad kalendarzem, a kod kalendarza nie wyświetla ich.
Czy ktoś może mi z tym pomóc?
Podobne problemy zgłaszali ludzie walczący z MySQL:
https://stackoverflow.com/questions/25410128/...ndar-using-a-json-php-page-as-an-event-source
https://coderwall.com/p/tr64xg/fetch-and-render-events-from-mysql-to-fullcalendar-js
http://www.j-cook.pro/index.php/forum/9-codin...add-fullcalendar-in-my-component?limitstart=0
https://processwire.com/talk/topic/17804-connect-fullcalendar-to-database/
http://fajitanachos.com/Fullcalendar-and-recurring-events/
https://www.silverstripe.org/community/forums/general-questions/show/7860
Pliki z kompletnym razorCMS wystarczy rozpakować na localhost w swoich folderach - PHP wyżej od 5.3
Muszę się zwrócić o pomoc do forumowiczów zaawansowanych w JS i PHP. Używam razorCMS opartego na plikach tekstowych, lubię to dla zasady, nie stosując nigdzie gdzie nie trzeba MySQL.
Ostatnio chciałem dodać do tego CMS'a moduł z rezerwacją spotkań, w oparciu o kod Fullcalendar:
https://fullcalendar.io/docs
Mój problem polega na tym, że bardziej zaawansowani programiści tworzą połączenie MYSQL dla tabelki z danymi, kodu JS i PHP.
Adaptowałem taki moduł do razorCMS'a w oparciu o MYSQL i kod taki działa, kalendarz się w razorCMS wyświetla - ale korzysta z bazy MySQL.
Jednak w ramach pasji unikania MySQL'a postanowiłem zmienić tabelę danych, by te pochodziły z plikowej bazy danych - krótko mówiąc, z pliku tekstowego. W tym celu używam z powodzeniem Flat File Database o nazwie Flinstone - opisanej tutaj:
http://www.xeweb.net/2011/07/14/flintstone-a-...alue-database-store-using-flat-files-for-php/
Stworzyłem więc moduł do razroCMS'a, gdzie w ścieżce:
blade_packs/system_fullcalendar.php uruchamia się mój moduł.
Działanie modułu polega na tym, że gdy w tekscie na stronie przeznaczonej na terminarz, znajdzie łańcuch znaków:
in-page-blade(fullcalendar)
to usuwa ten łańcuch i zastępuje go tym co chcę.
// Filtruje elementy z nazwa //
function scanPageFullCalendar(&$slugOut){
global $razorArray, $sig;
if (strpos($slugOut, 'in-page-blade(fullcalendar)') !== false) {
$event = displayfullcalendar();
// we have found pagination request, so we must remove this information from text
$slugOut = str_replace('in-page-blade(fullcalendar)', $event , $slugOut);
$slugOut = str_replace('<p>in-page-blade(fullcalendar)</p>', $event , $slugOut);
}
}
// end /////////////////////////////Linia $event = displayfullcalendar(); to wywołanie funkcji rysującej kalendarz na stronie.
Problem mój dotyczy tego, że gdy działa MySQL i przekazywany jest kod wywołujący kalendarz:
$(document).ready(function() {
var initialLocaleCode = 'pl';
var calendar = $('#calendar').fullCalendar({
contentHeight: 1340,
minTime: '8:00',
maxTime: '24:00',
slotDuration: '00:15:00',
snapDuration: '00:15:00',
locale: initialLocaleCode,
timezone: 'Europe/Warsaw',
editable:true,
header:{
left:'prev,next today',
center:'title',
right:'month,agendaWeek,agendaDay'
},
events: 'blade_packs/system_fullcalendar/load.php',
selectable:true,
selectHelper:true,
to woła on plik load.php, gdzie następuje połączenie z bazą MySQL, pobranie tabeli z eventami, a następnie przez polecenie:
echo json_encode($data);
dane te są ładnie wyświetlanie w terminarzu spotkań.
Plik load.php wołany ze skryptu wygląda tak:
$connect = new PDO('mysql:host=localhost;dbname=testing', 'root', '');
$data = array();
$query = "SELECT * FROM events ORDER BY id";
$statement = $connect->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
foreach($result as $row)
{
$data[] = array(
'id' => $row["id"],
'title' => $row["title"],
'start' => $row["start_event"],
'end' => $row["end_event"]
);
}
echo json_encode($data);Jeśli jednak tylko dopiszę z przodu inny kod php, np. require_once('flatdatabase.php');
a chciałbym by działał z kodem bez MySQL'a:
// flat file database
require_once('flatdatabase.php');
$data = array();
$all_keys_id = $users_db->getKeys(); // zwraca wszystkie klucze z tablicy - np. 1, 2, itd jako właścicieli linijek zapisu lekcji
$numRows = count($all_keys_id); // ile mamy linii danych w pliku, czyli ilość wpisów zanotowanych w bazie = ilość dostępnych kluczy w pliku/tabelce
for($i = 0; $i < $numRows; $i++) {
$rows = $users_db->get($all_keys_id[$i]);
$data[] = array(
'id' => $all_keys_id[$i],
'title' => $rows['title'],
'start' => $rows['start'],
'end' => $rows['end']
);
}
// co w tabelce w debugerze
bdump($data, 'tabelka');
echo json_encode($data);
znika połączenie z MySQL, dane się nie wyświetlają - kalendarz jest pusty i nie wiem, jaka to przyczyna. Dodanie tego pełnego kodu PHP by utworzyć tablicę z danymi również nie skutkuje jej wyświetleniem - rysuje się kalendarz już bez danych. Dane wyrzucane z tabelki są JSON moim zdaniem.
Zrobiłem też inne podejście z innym podobnym skryptem do fullcalendar - w nim wyrzuca mi dane z tablicy nad kalendarzem, a kod kalendarza nie wyświetla ich.
Czy ktoś może mi z tym pomóc?
Podobne problemy zgłaszali ludzie walczący z MySQL:
https://stackoverflow.com/questions/25410128/...ndar-using-a-json-php-page-as-an-event-source
https://coderwall.com/p/tr64xg/fetch-and-render-events-from-mysql-to-fullcalendar-js
http://www.j-cook.pro/index.php/forum/9-codin...add-fullcalendar-in-my-component?limitstart=0
https://processwire.com/talk/topic/17804-connect-fullcalendar-to-database/
http://fajitanachos.com/Fullcalendar-and-recurring-events/
https://www.silverstripe.org/community/forums/general-questions/show/7860
Pliki z kompletnym razorCMS wystarczy rozpakować na localhost w swoich folderach - PHP wyżej od 5.3