Version 1: Mit einem Klick das heutige Datum in den Beitrag einzufügen!
Als Icon
Im DropDown-Menü
Schnelles Einfügen per Icon ×
Schnelles Einfügen per Icon
Iconbar aufrufen!
Button unter "HTML" anlegen.
Namen vergeben z.B. "Aktuelles Datum einfügen".
Unter "HTML:" Den folgenden Code eintragen.
Speichern nicht vergessen!
Button erscheint am Ende der Iconbar. Button im Menü links an die richtige Stelle schieben!
Unter "Weitere Einstellungen" können die Berechtigungen vergeben werden!
Mit einem Klick wird das aktuelle Datum in den Beitrag eingefügt!
In Zeile 5 können vorab Forum-Formatierungen für das Datum bestimmt werden, die dann mit in den Beitrag eingefügt werden!!
In Zeile 10 kann das Auslöse-Icon ausgetauscht werden!
Soll das aktuelle Datum mit Uhrzeit eingefügt werden, muss Zeile 8 freigegeben und Zeile 5 auskommentiert oder gelöscht werden!
1 2 3 4 5 6 7 8 9 10 11
<style> .dateaktuell {cursor:pointer;} </style>
<div class="admin dateaktuell" onclick="xob_insert('[style=color:#1874c9;font-size:12px;font-weight:bold;]Aktualisiert '+ new Date().toLocaleDateString('de-DE') +'[/style]','')" title="Aktuelles Datum einfügen">
<!-- Datum mit Uhrzeit --> <!-- <div class="admin dateaktuell" onclick="xob_insert('[style=color:#1874c9;font-size:12px;font-weight:bold;]Aktualisiert '+ new Date().toLocaleString('de-DE') +'[/style]','')" title="Aktuelles Datum einfügen"> -->
Version 2: Mit einem Klick das Datum über den Input-Kalender oder auch direkt in den Beitrag einzufügen!
Als Icon
Im DropDown-Menü
Beliebiges Datum über Input-Kalender einfügen ×
Beliebiges Datum über Input-Kalender einfügen
Iconbar aufrufen!
Button unter "HTML" anlegen.
Namen vergeben z.B. "Datum einfügen".
Unter "HTML:" Den folgenden Code eintragen.
Speichern nicht vergessen!
Button erscheint am Ende der Iconbar. Button im Menü links an die richtige Stelle schieben!
Unter "Weitere Einstellungen" können die Berechtigungen vergeben werden!
Mit einem Klick wird der Input-Kalender geöffnet und das aktuelle Datum wird angezeigt! Klickt man auf das aktuelle Datum wird es in den Beitrag eingefügt! Wird ein anderes Datum benötigt, klickt man auf die kleine Kalender-Grafik und wählt ein beliebiges Datum aus! Mit einem Klick auf das neu angezeigte Datum wird es in den Beitrag eingefügt!
In Zeile 8 kann das Auslöse-Icon ausgetauscht werden!
In Zeile 9 können vorab Forum-Formatierungen und Text geändert werden!!
In Zeile 2 wird die Position der Datum-Zeile über "margin" bestimmt!
Unter "Weitere Einstellungen" können die Berechtigungen vergeben werden oder es wird das kleine Plugin aus Beitrag #6 installiert!
Nach dem Öffnen des DropDown-Menüs wird im Input-Kalender das aktuelle Datum wird angezeigt! Klickt man auf das aktuelle Datum wird es in den Beitrag eingefügt! Wird ein anderes Datum benötigt, klickt man auf die kleine Kalender-Grafik und wählt ein beliebiges Datum aus! Mit einem Klick auf das neu angezeigte Datum wird es in den Beitrag eingefügt!
In Zeile 1 können die zusätzlichen Forum-Formatierungen und die kleine Uhren-Grafik geändert werden!
Ich habe mal wieder eine Idee und begann mich gerade zu fragen ob es umsetzbar ist, dass hier nicht der normale Kalender angezeigt wird sondern ein eigener? Soll bedeuten: ich selbst führe ein RPG Forum, dessen Geschichte nicht in dieser sondern einer fiktiven Welt mit eigener Zeitrechnung spielt. Falls meine Idee überhaupt machbar ist, dächte ich daran einen eigenen Kalender einzustellen, der eben nicht die Jahreszahlen 2024 und Co beinhaltet, sondern 3033 und Co.
am Besten erzähle ich mal ein wenig zu meiner Idee. :D Und zwar spielt unsere Geschichte aktuell im Jahr 3033 (oft auch als Jahr 12 bezeichnet, da wir unsere Welt dystopisch ist und diese Veränderung vor 12 Jahren stattfand). Für den Kalender wäre es schön, wenn man bis zu diesem 'Ausbruchs-Jahr' zurückgehen könnte. Also Jahr 3021 sozusagen als frühestes Kalenderjahr. Alles andere wäre wahrscheinlich zu aufwendig. Einträge an bestimmten Tagen wären klasse, wobei hier die Frage wäre ob es ggf nur Administratoren und Moderatoren erlaubt sein sollte Einträge in den Kalender zu machen. *grübel*
Hm. Da kommt mir noch eine andere Idee! Vllt könnte man dazu eine Kalender erstellen, der übergreifend ist? Ich hätte da etwas vor Augen das ich ähnlich von Anbietern wie MyBB kenne, weiß aber nicht ob das bei Xobor so umsetzbar ist. Wenn nicht, ist das natürlich auch nicht dramatisch. Diese Idee wäre, sich auf dem Index einen Ausschnitt aus dem Kalender anzeigen lassen zu können (z.B. jetzt gerade Juli, Aug, Sept.) und dieser könne dann befüllt werden indem im Beitrag eben ein Kalenderdatum ausgewählt würde.
Falls das jetzt gerade eine total blöde oder nicht umsetzbare Idee ist, entschuldige ich mich! :D Dann wäre ich natürlich auch schon sehr dankbar, falls das obrige funktioniert und man ganz einfach einen individuellen Kalender hat.
Fiktiver Kalender für das Jahr 3033! Aktualisiert 31.08.2024
Habe ein Kalender, den man in der Jahreszahl einstellen kann. Es zeigt den heutigen Tag an, aber z.B. 1009 Jahre weiter! Mit aktiven Einträge wird es allerdings schwieriger.... Zum Testen einfach in die Kopfzeile kopieren!
Durch Zeile 32+34 wird der Kalender zentriert!
In Zeile 82 werden die Jahre eintragen (hier 1009 = Jahr 3033), um die der Kalender verschoben werden soll!
Wird Zeile 82 gelöscht und Zeile 83 freigegeben, hat man einen aktuellen Kalender!
<script> const d = new Date(); const dm = d.getMonth() + 1; const dj = d.getYear() + 1900;
Kalender(dm, dj, 'kalender');
function Kalender (Monat, Jahr, KalenderId) {
const Monatsname = new Array("Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"); const Tag = new Array("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So");
// aktuelles Datum für die spätere Hervorhebung ermitteln const jetzt = new Date(); let DieserTag = -1; if ( (jetzt.getFullYear() == Jahr) && (jetzt.getMonth() + 1 == Monat) ) DieserTag = jetzt.getDate();
// ermittle Wochentag des ersten Tags im Monat halte diese Information in Start fest // getDay liefert 0..6 für So..Sa. Wir möchten aber Mo=0 bis So=6, darum +6 und mod 7. const Zeit = new Date(Jahr, Monat - 1, 1); const Start = (Zeit.getDay() + 6) % 7;
// die meisten Monate haben 31 Tage... let Stop = 31;
// ...April (4), Juni (6), September (9) und November (11) haben nur 30 Tage... if (Monat == 4 || Monat == 6 || Monat == 9 || Monat == 11) --Stop;
// ...und der Februar nur 28 Tage... if (Monat == 2) { Stop = Stop-3; // ...außer in Schaltjahren if (Jahr % 4 == 0) Stop++; if (Jahr % 100 == 0) Stop--; if (Jahr % 400 == 0) Stop++; }
const tabelle = document.getElementById(KalenderId); if (!tabelle) return false;
// schreibe Tabellenkopf const headRow = tabelle.insertRow(0); for (var i = 0; i < 7; i++) { var cell = headRow.insertCell(i); cell.innerHTML = Tag[i]; }
// ermittle Tag und schreibe Zeile let Tageszahl = 1;
// Monate können 4 bis 6 Wochen berühren. Darum laufen, bis die Tageszahl hinter dem Monatsletzen liegt. for (let i = 0; Tageszahl <= Stop; i++) { let row = tabelle.insertRow(1 +i);
for (let j = 0; j < 7; j++) { let cell = row.insertCell(j);
// Zellen vor dem Start-Tag in der ersten Zeile und Zeilen nach dem Stop-Tag werden leer aufgefüllt if ( ((i == 0) && (j < Start)) || (Tageszahl > Stop) ) { cell.innerHTML = ' '; } else { // normale Zellen werden mit der Tageszahl befüllt und mit der Klasse Kalendertag markiert cell.innerHTML = Tageszahl; cell.className = 'kalendertag'
// und der aktuelle Tag (heute) wird noch einmal speziell mit der Klasse "heute" markiert if (Tageszahl == DieserTag) { cell.className = cell.className + ' heute'; }
Habe die Ursache gefunden! Es lag am zusätzlichen Skript "Navigations-Pfad verbessern"! Die Skripte stören sich! Da Du das Gaia-Templates nutzt, hat das Skript kaum Wirkung! Im Gaia muss man die Navigationspfade ja suchen, die es da kaum gibt! In Deinem Fall, falls Du den Kalender fest installieren möchtest, kann man das Skript "Navigations-Pfad verbessern" deaktivieren! Habe das Skript etwas erweitert und den Kalender zentriert!
Habe noch einen Kalender gefunden, der ein zusätzliches Sprung-Menü zu einer gewünschten Jahreszahl aufweisen kann! Ursprünglich war der Kalender auch mit einer Termineingabe versehen, aber die Speicherung hat nicht funktioniert! Gut wäre es, wenn auf dem Xobor-Server die Speicherung erfolgen würde und nicht lokal, da sonst nach Löschung des Browser-Chache die Daten weg sein würden! Vielleicht gibt es im Jahr 3033 eine Lösung hierzu!
Hier folgt ein Kalender mit deutschen Datumsangaben für das Jahr 3033, mit einem Sprung-Menü zum gewünschten Jahr, ohne Ereignisverwaltung!
In den Zeilen 168, 195+ 272 wird die Zahl eingetragen, um die das Jahr in die Zukunft verschoben werden soll (hier 1009 = 3033)!
<script> function newDatum(){ var Heute = new Date(); var Tag = Heute.getDate(); var Monat = Heute.getMonth()+1;
// Kalender Ereignisse: Aufs Jahr 3033 einstellen var Jahr = Heute.getFullYear()+1009;
if (Tag < 10){Tag = "0" + Tag;} if (Monat < 10){Monat = "0" + Monat;}
var aktDatum = Jahr +"-"+ Monat +"-"+ Tag ; document.getElementById('eventDate').value = aktDatum; } </script>
<script> let events = [];
// Function to generate a range of years for the year select input function generate_year_range(start, end) { let years = ""; for (let year = start; year <= end; year++) { years += "<option value='" + year + "'>" + year + "</option>"; } return years; }
// Year Range - Verschiebung um 1009 Jahre currentYear = today.getFullYear()+1009; selectYear = document.getElementById("year"); selectMonth = document.getElementById("month");
// Year Range - von jahr 3000 createYear = generate_year_range(3020, 3050); document.getElementById("year").innerHTML = createYear;
let calendar = document.getElementById("calendar"); let months = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]; let days = ["So", "Mo", "Di ", "Mi ", "Do ", "Fr ", "Sa"];
// Function to navigate to the next month function next() { currentYear = currentMonth === 11 ? currentYear + 1 : currentYear; currentMonth = (currentMonth + 1) % 12; showCalendar(currentMonth, currentYear); }
// Function to navigate to the previous month function previous() { currentYear = currentMonth === 0 ? currentYear - 1 : currentYear; currentMonth = currentMonth === 0 ? 11 : currentMonth - 1; showCalendar(currentMonth, currentYear); }
// Function to jump to a specific month and year function jump() { currentYear = parseInt(selectYear.value); currentMonth = parseInt(selectMonth.value); showCalendar(currentMonth, currentYear); }
// Function to display the calendar function showCalendar(month, year) { let firstDay = new Date(year, month, 1).getDay(); tbl = document.getElementById("calendar-body"); tbl.innerHTML = ""; monthAndYear.innerHTML = months[month] + " " + year; selectYear.value = year; selectMonth.value = month;
let date = 1; for (let i = 0; i < 6; i++) { let row = document.createElement("tr"); for (let j = 0; j < 7; j++) { if (i === 0 && j < firstDay) { cell = document.createElement("td"); cellText = document.createTextNode(""); cell.appendChild(cellText); row.appendChild(cell); } else if (date > daysInMonth(month, year)) { break; } else { cell = document.createElement("td"); cell.setAttribute("data-date", date); cell.setAttribute("data-month", month + 1); cell.setAttribute("data-year", year); cell.setAttribute("data-month_name", months[month]); cell.className = "date-picker"; cell.innerHTML = "<span>" + date + "</span";
if ( date === today.getDate() &&
// Kalender: Verschiebung um 1009 Jahre year === today.getFullYear()+1009 && month === today.getMonth() ) { cell.className = "date-picker selected"; }
// Function to generate a range of years for the year select input function generate_year_range(start, end) { let years = ""; for (let year = start; year <= end; year++) { years += "<option value='" + year + "'>" + year + "</option>"; } return years; }
// Function to navigate to the next month function next() { currentYear = currentMonth === 11 ? currentYear + 1 : currentYear; currentMonth = (currentMonth + 1) % 12; showCalendar(currentMonth, currentYear); }
// Function to navigate to the previous month function previous() { currentYear = currentMonth === 0 ? currentYear - 1 : currentYear; currentMonth = currentMonth === 0 ? 11 : currentMonth - 1; showCalendar(currentMonth, currentYear); }
// Function to jump to a specific month and year function jump() { currentYear = parseInt(selectYear.value); currentMonth = parseInt(selectMonth.value); showCalendar(currentMonth, currentYear); }
// Function to display the calendar function showCalendar(month, year) { let firstDay = new Date(year, month, 1).getDay(); tbl = document.getElementById("calendar-body"); tbl.innerHTML = ""; monthAndYear.innerHTML = months[month] + " " + year; selectYear.value = year; selectMonth.value = month;
let date = 1; for (let i = 0; i < 6; i++) { let row = document.createElement("tr"); for (let j = 0; j < 7; j++) { if (i === 0 && j < firstDay) { cell = document.createElement("td"); cellText = document.createTextNode(""); cell.appendChild(cellText); row.appendChild(cell); } else if (date > daysInMonth(month, year)) { break; } else { cell = document.createElement("td"); cell.setAttribute("data-date", date); cell.setAttribute("data-month", month + 1); cell.setAttribute("data-year", year); cell.setAttribute("data-month_name", months[month]); cell.className = "date-picker"; cell.innerHTML = "<span>" + date + "</span";
if ( date === today.getDate() &&
// Kalender: Verschiebung um 1009 Jahre year === today.getFullYear() && month === today.getMonth() ) { cell.className = "date-picker selected"; }
Hier folgt das Original-Skript von der Seite www.geeksforgeeks.org Der Kalender weist viele Funktionen auf, nur besteht nicht die Möglichkeit die eingetragenen Ereignisse abzuspeichern!
<!-- Main wrapper for the calendar application --> <div class="wrapper"> <div class="container-calendar"> <div id="left"> <h1>Dynamic Calendar</h1> <div id="event-section"> <h3>Add Event</h3> <input type="date" id="eventDate"> <input type="text" id="eventTitle" placeholder="Event Title"> <input type="text" id="eventDescription" placeholder="Event Description"> <button id="addEvent" onclick="addEvent()"> Add </button> </div> <div id="reminder-section"> <h3>Reminders</h3> <!-- List to display reminders --> <ul id="reminderList"> <li data-event-id="1"> <strong>Event Title</strong> - Event Description on Event Date <button class="delete-event" onclick="deleteEvent(1)"> Delete </button> </li> </ul> </div> </div> <div id="right"> <h3 id="monthAndYear"></h3> <div class="button-container-calendar"> <button id="previous" onclick="previous()"> ‹ </button> <button id="next" onclick="next()"> › </button> </div> <table class="table-calendar" id="calendar" data-lang="en"> <thead id="thead-month"></thead> <!-- Table body for displaying the calendar --> <tbody id="calendar-body"></tbody> </table> <div class="footer-container-calendar"> <label for="month">Jump To: </label> <!-- Dropdowns to select a specific month and year --> <select id="month" onchange="jump()"> <option value=0>Jan</option> <option value=1>Feb</option> <option value=2>Mar</option> <option value=3>Apr</option> <option value=4>May</option> <option value=5>Jun</option> <option value=6>Jul</option> <option value=7>Aug</option> <option value=8>Sep</option> <option value=9>Oct</option> <option value=10>Nov</option> <option value=11>Dec</option> </select> <!-- Dropdown to select a specific year --> <select id="year" onchange="jump()"></select> </div> </div> </div> </div> <!-- Include the JavaScript file for the calendar functionality -->
<script src="./script.js"></script>
<script> // script.js
// Define an array to store events let events = [];
// letiables to store event input fields and reminder list let eventDateInput = document.getElementById("eventDate"); let eventTitleInput = document.getElementById("eventTitle"); let eventDescriptionInput = document.getElementById("eventDescription"); let reminderList = document.getElementById("reminderList");
// Counter to generate unique event IDs let eventIdCounter = 1;
// Function to add events function addEvent() { let date = eventDateInput.value; let title = eventTitleInput.value; let description = eventDescriptionInput.value;
if (date && title) { // Create a unique event ID let eventId = eventIdCounter++;
// Function to delete an event by ID function deleteEvent(eventId) { // Find the index of the event with the given ID let eventIndex = events.findIndex((event) => event.id === eventId);
if (eventIndex !== -1) { // Remove the event from the events array events.splice(eventIndex, 1); showCalendar(currentMonth, currentYear); displayReminders(); } }
// Function to display reminders function displayReminders() { reminderList.innerHTML = ""; for (let i = 0; i < events.length; i++) { let event = events[i]; let eventDate = new Date(event.date); if (eventDate.getMonth() === currentMonth && eventDate.getFullYear() === currentYear) { let listItem = document.createElement("li"); listItem.innerHTML = `<strong>${event.title}</strong> - ${event.description} on ${eventDate.toLocaleDateString()}`;
// Add a delete button for each reminder item let deleteButton = document.createElement("button"); deleteButton.className = "delete-event"; deleteButton.textContent = "Delete"; deleteButton.onclick = function () { deleteEvent(event.id); };
// Function to generate a range of // years for the year select input function generate_year_range(start, end) { let years = ""; for (let year = start; year <= end; year++) { years += "<option value='" + year + "'>" + year + "</option>"; } return years; }
// Function to navigate to the next month function next() { currentYear = currentMonth === 11 ? currentYear + 1 : currentYear; currentMonth = (currentMonth + 1) % 12; showCalendar(currentMonth, currentYear); }
// Function to navigate to the previous month function previous() { currentYear = currentMonth === 0 ? currentYear - 1 : currentYear; currentMonth = currentMonth === 0 ? 11 : currentMonth - 1; showCalendar(currentMonth, currentYear); }
// Function to jump to a specific month and year function jump() { currentYear = parseInt(selectYear.value); currentMonth = parseInt(selectMonth.value); showCalendar(currentMonth, currentYear); }
// Function to display the calendar function showCalendar(month, year) { let firstDay = new Date(year, month, 1).getDay(); tbl = document.getElementById("calendar-body"); tbl.innerHTML = ""; monthAndYear.innerHTML = months[month] + " " + year; selectYear.value = year; selectMonth.value = month;
let date = 1; for (let i = 0; i < 6; i++) { let row = document.createElement("tr"); for (let j = 0; j < 7; j++) { if (i === 0 && j < firstDay) { cell = document.createElement("td"); cellText = document.createTextNode(""); cell.appendChild(cellText); row.appendChild(cell); } else if (date > daysInMonth(month, year)) { break; } else { cell = document.createElement("td"); cell.setAttribute("data-date", date); cell.setAttribute("data-month", month + 1); cell.setAttribute("data-year", year); cell.setAttribute("data-month_name", months[month]); cell.className = "date-picker"; cell.innerHTML = "<span>" + date + "</span";
if ( date === today.getDate() && year === today.getFullYear() && month === today.getMonth() ) { cell.className = "date-picker selected"; }
// Check if there are events on this date if (hasEventOnDate(date, month, year)) { cell.classList.add("event-marker"); cell.appendChild( createEventTooltip(date, month, year) ); }
// Function to create an event tooltip function createEventTooltip(date, month, year) { let tooltip = document.createElement("div"); tooltip.className = "event-tooltip"; let eventsOnDate = getEventsOnDate(date, month, year); for (let i = 0; i < eventsOnDate.length; i++) { let event = eventsOnDate[i]; let eventDate = new Date(event.date); let eventText = `<strong>${event.title}</strong> - ${event.description} on ${eventDate.toLocaleDateString()}`; let eventElement = document.createElement("p"); eventElement.innerHTML = eventText; tooltip.appendChild(eventElement); } return tooltip; }
// Function to get events on a specific date function getEventsOnDate(date, month, year) { return events.filter(function (event) { let eventDate = new Date(event.date); return ( eventDate.getDate() === date && eventDate.getMonth() === month && eventDate.getFullYear() === year ); }); }
// Function to check if there are events on a specific date function hasEventOnDate(date, month, year) { return getEventsOnDate(date, month, year).length > 0; }
// Function to get the number of days in a month function daysInMonth(iMonth, iYear) { return 32 - new Date(iYear, iMonth, 32).getDate(); }
// Call the showCalendar function initially to display the calendar showCalendar(currentMonth, currentYear); </script> </body>
Da schaut man mal eine Weile nicht hier rein und schon warst du wieder fleißig! Der Kalender ist klasse! Auch ohne Termineingabe! Vielen, vielen Dank!
Edit: Habe es direkt einmal ausprobiert und mache wohl noch etwas falsch. Daher noch einmal eine (sicherlich blöde) Frage.
- Das Script kann ich so wie es ist im Admin CP unter Iconbar einfach in das "HTML"-Feld eintragen? Oder muss hier noch etwas angepasst werden? Bei mir sieht es nämlich noch so aus:
Schöner wäre es freilich, wenn ich auch hier einen Button hätte der erst durch Klick die Box mit dem Kalender öffnet.
- Und gleich noch eine andere Frage bzw. ein Problem: Es passiert nichts, wenn ich auf ein Datum klicke. Also weder wird das Datum in den Beitrag eingefügt, noch geschieht irgendetwas anderes. :3
Wenn Du einen Kalendereintrag in Beiträgen platzieren willst, geht das auch gut mit dem Fallblattkalender. Hier wird ein neuer Foren-Code erstellt, der als Icon in der Iconbar nur angeklickt werden braucht, um ihn den Beitrag eingefügt zu werden! Ein Datum ist voreingestellt, kann im Beitrag beliebig verändern werden! Ein beliebig wählbarer Text zum Datum beschreibt dann das Ereignis.