Mein Vorschlag:
Features:
- Checkbox bei der News-Eingabe um einen Link zum News-Artikel gleich im Kalender eintragen zu lassen
- Verweis direkt zu den News, ohne Kalender-Detail-Seite
- Datum und Uhrzeit des Kalender-Eintrags frei wählbar
- News-Artikel und Kalender-Eintrag lassen sich beide in der News-Ansicht bearbeiten und löschen
- Kalender kann ohne Probleme weiterhin genutzt werden (Einträge aus dem News-Bereich werden auch hier angezeigt)
Installation:
(Ich hoffe, dass du mit phpMyAdmin ein bisschen zurecht kommst)
phpMyAdmin öffnen, in die Datenbank der ilch-Installation gehen. Auf SQL im oberen Menü klicken und dort folgendes einfügen (eventuell ic1 anpassen):
ALTER TABLE `ic1_kalender` ADD `news_id` INT( 11 ) NOT NULL AFTER `recht`
Ok klicken.
include/admin/news.php:
<?php
// Copyright by: Manuel
// Support: www.ilch.de
defined ('main') or die ('no direct access');
defined ('admin') or die ('only admin access');
$design = new design ('Admins Area', 'Admins Area', 2);
$design->header();
// -----------------------------------------------------------|
// #
// ##
// ###
// #### F u n k t i o n e n
function getKats ($akt) {
$katAR = array();
$kats = '';
$erg = db_query("SELECT DISTINCT news_kat FROM `prefix_news`");
while ($row = db_fetch_object($erg)) {
$katAr[] = $row->news_kat;
}
$katAr[] = 'Allgemein';
$katAr = array_unique($katAr);
foreach($katAr as $a) {
if (trim($a) == trim($akt)) {
$sel = ' selected';
} else {
$sel = '';
}
$kats .= '<option' . $sel . '>' . $a . '</option>';
}
return ($kats);
}
// #### F u n k t i o n
// ###
// ##
// #
// #
// ##
// ###
// #### A k t i o n e n
if (!empty($_REQUEST['um'])) {
$um = $_REQUEST['um'];
$_POST['titel'] = escape($_POST['titel'], 'string');
$_POST['grecht'] = escape($_POST['grecht'], 'integer');
$_POST['kat'] = escape($_POST['kat'], 'string');
$_POST['katLis'] = escape($_POST['katLis'], 'string');
$_POST['newsID'] = escape($_POST['newsID'], 'integer');
$_POST['kal_eintrag'] = escape($_POST['kal_eintrag'], 'integer');
$_POST['kal_datum'] = escape($_POST['kal_datum'], 'string');
$_POST['kal_time'] = escape($_POST['kal_time'], 'string');
if ($um == 'insert') {
// insert
$text = escape($_POST['txt'], 'textarea');
if ($_POST['katLis'] == 'neu') {
$_POST['katLis'] = $_POST['kat'];
}
db_query("INSERT INTO `prefix_news` (news_title,user_id,news_time,news_recht,news_kat,news_text)
VALUES ('" . $_POST['titel'] . "'," . $_SESSION['authid'] . ",NOW()," . $_POST['grecht'] . ",'" . $_POST['katLis'] . "','" . $text . "')");
// Kalendereintrag
if($_POST['kal_eintrag'] == 1) {
list($st, $min) = explode(":", $_POST['kal_time']);
list($year, $month, $day) = explode('-', $_POST['kal_datum']);
$news_id = mysql_insert_id();
$timestamp = mktime($st, $min, 0, $month, $day, $year);
db_query("INSERT INTO `prefix_kalender` (time, title, text, recht, news_id)
VALUES ('$timestamp', '{$_POST['titel']}', '', 0, $news_id)");
}
// insert
} elseif ($um == 'change') {
// edit
$text = escape($_POST['txt'], 'textarea');
if ($_POST['katLis'] == 'neu') {
$_POST['katLis'] = $_POST['kat'];
}
db_query('UPDATE `prefix_news` SET
news_title = "' . $_POST['titel'] . '",
user_id = "' . $_SESSION['authid'] . '",
news_recht = "' . $_POST['grecht'] . '",
news_kat = "' . $_POST['katLis'] . '",
news_text = "' . $text . '" WHERE news_id = "' . $_POST['newsID'] . '" LIMIT 1');
$edit = $_POST['newsID'];
if($_POST['kal_eintrag'] == 1) {
list($min, $st) = explode(":", $_POST['kal_time']);
list($year, $month, $day) = explode('-', $_POST['kal_datum']);
$news_id = mysql_insert_id();
$timestamp = mktime($st, $min, 0, $month, $day, $year);
db_query("UPDATE `prefix_kalender` SET
time = '$timestamp',
title = '{$_POST['titel']}',
text = '',
recht = 0
WHERE news_id = {$_POST['newsID']}");
}
}
}
// edit
// del
if ($menu->get(1) == 'del') {
$res = db_result(db_query("SELECT COUNT(*) FROM `prefix_kalender` WHERE news_id = '{$menu->get(2)}'"));
if($res == 1) {
db_query("DELETE FROM `prefix_kalender` WHERE news_id = '{$menu->get(2)}'");
}
db_query('DELETE FROM `prefix_news` WHERE news_id = "' . $menu->get(2) . '" LIMIT 1');
}
// del
// #### A k t i o n e n
// ###
// ##
// #
// #
// ##
// ###
// #### h t m l E i n g a b e n
if (empty ($doNoIn)) {
$limit = 20; // Limit
$page = ($menu->getA(1) == 'p' ? $menu->getE(1) : 1);
$MPL = db_make_sites ($page , '' , $limit , "?news" , 'news');
$anfang = ($page - 1) * $limit;
if ($menu->get(1) != 'edit') {
$FnewsID = '';
$Faktion = 'insert';
$Fueber = '';
$Fstext = '';
$Ftxt = '';
$Fgrecht = '';
$FkatLis = '';
$Fsub = 'Eintragen';
$display = 'none';
$checked = '';
$uhrzeit = date("H:i");
$datum = date("Y-m-d");
} else {
$kalender = db_fetch_object(db_query("SELECT time, news_id FROM `prefix_kalender` WHERE news_id = '{$menu->get(2)}'"));
if($kalender->news_id != 0 || $kalender->news_id != '') {
$uhrzeit = date("H:i", $kalender->time);
$datum = date("Y-m-d", $kalender->time);
$display = 'block';
$checked = 'checked="checked"';
} else {
$uhrzeit = '';
$datum = '';
$display = 'none';
$checked = '';
}
$row = db_fetch_object(db_query("SELECT * FROM `prefix_news` WHERE news_id = " . $menu->get(2)));
$FnewsID = $row->news_id;
$Faktion = 'change';
$Fueber = $row->news_title;
$Ftxt = stripslashes($row->news_text);
$Fgrecht = $row->news_recht;
$FkatLis = $row->news_kat;
$Fsub = 'Ändern';
}
$tpl = new tpl ('news', 1);
$ar = array
(
'NEWSID' => $FnewsID,
'AKTION' => $Faktion,
'MPL' => $MPL,
'UEBER' => $Fueber,
'txt' => $Ftxt,
'SMILIS' => getsmilies(),
'grecht' => dbliste($Fgrecht, $tpl, 'grecht', "SELECT id,name FROM prefix_grundrechte ORDER BY id DESC"),
'KATS' => getKats($FkatLis),
'FSUB' => $Fsub,
'DISPLAY' => $display,
'CHECKED' => $checked,
'UHRZEIT' => $uhrzeit,
'DATUM' => $datum
);
$tpl->set_ar_out($ar, 0);
// e d i t , d e l e t e
$abf = 'SELECT news_id,news_title
FROM `prefix_news`
ORDER BY news_time DESC
LIMIT ' . $anfang . ',' . $limit;
$erg = db_query($abf);
$class = '';
while ($row = db_fetch_object($erg)) {
$class = ($class == 'Cmite' ? 'Cnorm' : 'Cmite');
$tpl->set_ar_out(array ('ID' => $row->news_id, 'class' => $class, 'TITEL' => $row->news_title) , 1);
}
// e d i t , d e l e t e
$tpl->set_ar_out(array ('MPL' => $MPL) , 2);
}
$design->footer();
?>
include/admin/templates/news.htm:
<script language="JavaScript" type="text/javascript"><!--
function delcheck ( DELID ) {
var frage = confirm ( "Willst du diesen Eintrag wirklich löschen?" );
if ( frage == true ) {
document.location.href="?news-del-"+DELID;
}
}
function delKcheck ( DELID , NID) {
var frage = confirm ( "Willst du dieses Kommentar wirklich löschen?" );
if ( frage == true ) {
document.location.href="?news-sKoms-"+NID+"-Kdel-"+DELID+"#"+NID;
}
}
function sichtbar(){
if( document.form.katLis.value=="neu"){
document.form.kat.style.visibility="visible";
} else {
document.form.kat.style.visibility="hidden";
}
}
function show_kal_eintrag() {
var div = document.getElementById('kal_eintrag');
if(document.form.kal_eintrag.checked == true) {
div.style.display = "block";
} else {
div.style.display = "none";
}
}
//--></script>
<script type='text/javascript' src='include/includes/js/bbcode.js'></script>
<table cellpadding="0" cellspacing="0" border="0"><tr><td><img src="include/images/icons/admin/news.png" /></td><td width="30"></td><td valign="bottom"><h1>News</h1></td></tr></table>
<hr style="width: 400px; margin: 0px;" >
<br /><br />
<table border="0" cellspacing="0" cellpadding="0"><tr><td valign="top">
<form method="POST" name="form" action="?news">
<input type="hidden" name="um" value="{AKTION}">
<input type="hidden" name="newsID" value="{NEWSID}">
<table cellpadding="2" cellspacing="1" border="0" class="border">
<tr>
<td class="Cmite" align="right"><strong>Titel : </strong></td>
<td class="Cnorm"><input size="50" type="text" name="titel" value="{UEBER}"></td>
</tr><tr>
<td class="Cmite" align="right"><strong>News : </strong></td>
<td rowspan="2" class="Cnorm">
<!-- BB Code START -->
<a href="javascript:simple('b')"><img style="padding-left: 4%; float: left;" src="include/images/icons/button.bold.gif" alt="b" title="{_lang_bold}" border="0"></a>
<a href="javascript:simple('i')"><img style="padding-left: 4%; float: left;" src="include/images/icons/button.italic.gif" alt="i" title="{_lang_italic}" border="0"></a>
<a href="javascript:simple('u')"><img style="padding-left: 4%; float: left;" src="include/images/icons/button.underline.gif" alt="u" title="{_lang_underlined}" border="0"></a>
<a href="javascript:simple('code')"><img style="padding-left: 4%; float: left;" src="include/images/icons/button.code.gif" alt="Code" title="{_lang_code}" border="0"></a>
<a href="javascript:simple_liste()"><img style="padding-left: 4%; float: left;" src="include/images/icons/button.insertunorderedlist.gif" alt="{_lang_list}" title="{_lang_list}" border="0"></a>
<a href="javascript:simple('url')"><img style="padding-left: 4%; float: left;" src="include/images/icons/button.link.gif" alt="Url" title="{_lang_link}" border="0"></a>
<a href="javascript:simple('img')"><img style="padding-left: 4%; float: left;" src="include/images/icons/button.image.gif" alt="{_lang_picture}" title="{_lang_picture}" border="0"></a>
<!-- BB Code ENDE -->
</td>
</tr><tr>
<td rowspan="2" valign="top" class="Cmite">{SMILIS}</td>
</tr><tr>
<td class="Cnorm"><textarea name="txt" rows="15" cols="65" tabindex="2">{txt}</textarea></td>
</tr><tr>
<td class="Cmite" align="right"><strong>Sichtbar ab : </strong></td>
<td class="Cnorm"><select name="grecht">{_list_grecht@<option%1 value="%2">%3</option>}</select></td>
</tr><tr>
<td class="Cmite" align="right"><strong>Kategorie : </strong></td>
<td class="Cnorm"><select onChange="sichtbar()" name="katLis">{KATS}<option value="neu">Neu:</option></select> <input type="text" name="kat" size="40"></td>
</tr>
<tr>
<td align="right" class="Cmite"><strong>Kalender : </strong></td>
<td class="Cnorm">
<input type="checkbox" name="kal_eintrag" value="1" onclick="show_kal_eintrag()" {CHECKED} /> Eintrag in Kalender einfügen
<div id="kal_eintrag" style="display:{DISPLAY};">
<table>
<tr>
<td>Datum:</td>
<td><input type="text" name="kal_datum" value="{DATUM}" size="10" /> (jjj-mm-dd)</td>
</tr>
<tr>
<td>Uhrzeit:</td>
<td><input type="text" name="kal_time" value="{UHRZEIT}" size="5" /> (hh:mm)</td>
</tr>
</table>
</div>
</td>
</tr>
<tr class="Cdark">
<td></td>
<td><input type="submit" value="{FSUB}" name="submit"></td>
</tr>
</table>
</form>
<br /><br />
<div class="info_box">
<b>Merke (Kategorie Bild)</b>
<br />
<span class="smalfont">
Das Kategorie Bild muss in den Ordner include/images/news/
<br />
Das Bild muss genau wie die Kategorie heissen z.B. wenn die Kategorie
Allgemein heisst dann muss das Bild Allgemein heissen;)...
<br />
Die Endung muss entweder .jpg oder .gif sein bei uns also z.B. Allgemein.jpg
</span>
</div>
<div class="info_box">
<b>Merke (Vorschau Funktion)</b>
<br />
<span class="smalfont">
Soll nur ein kleinerer Vorschautext angezeigt werden, einfach erst die Vorschau
eingeben und nach der Vorschau dann <b>[PREVIEWENDE]</b> schreiben. Dann den langen
Text eintragen.
</span>
</div>
</td><td width="75"> </td><td valign="top">
{MPL}
<table cellpadding="3" cellspacing="1" border="0" class="border">
{EXPLODE}<tr class="{class}">
<td><a href="#" name="{ID}"></a><a href="javascript:delcheck({ID})"><img src="include/images/icons/del.gif" alt="Löschen" title="Löschen" border="0"></a></td>
<td><a href="?news-edit-{ID}"><img src="include/images/icons/edit.gif" alt="Verändern" title="Verändern" border="0"></a></td>
<td>{TITEL}</td>
</tr>{EXPLODE}
</table>
{MPL}
</td></tr></table>
<script language="JavaScript" type="text/javascript">
<!--
sichtbar();
//-->
</script>
include/contents/kalender.php:
<?php
# Kalender Script � by Nickel
defined ('main') or die ( 'no direct access' );
//-----------------------------------------------------------|
$title = $allgAr['title'].' :: Kalender';
$hmenu = 'Kalender';
$design = new design ( $title , $hmenu );
$design->header();
$tpl = new tpl ( 'kalender.htm' );
//-----------------------------------------------------------|
//Daten
$month = date('n');
$year = date('Y');
$gday = 0;
$view = 0;
$eid = 0;
if ($menu->getA(1) == 'v' AND is_numeric($menu->getE(1))) {
$view = $menu->getE(1);
}
if ($menu->getA(2) == 'm' AND is_numeric($menu->getE(2)) AND $menu->getE(2) > 0 AND $menu->getE(2) < 13) {
$month = $menu->getE(2);
}
if ($menu->getA(4) == 'd' AND is_numeric($menu->getE(4)) AND $menu->getE(4) > 0 AND $menu->getE(4) < 32) {
$gday = $menu->getE(4);
}
if ($menu->getA(3) == 'y' AND is_numeric($menu->getE(3)) AND $menu->getE(3) > 2000 AND $menu->getE(3) < date('Y', (time()+pow(8,9)))) {
$year = $menu->getE(3);
}
if ($menu->getA(2) == 'e' AND is_numeric($menu->getE(1))) {
$eid = $menu->getE(2);
}
$arr_month = array('1'=>'Januar','Februar','M�rz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
$arr_day = array('So','Mo','Di','Mi','Do','Fr','Sa');
$days = date('t',mktime(0,0,0,$month,1,$year));
$start_col = date('w',mktime(0,0,0,$month,1,$year))-1;
$rows = ceil($days/7);
$day=1;
$data = array ();
$data_id = array ();
$aus = array();
//Daten aus der MySQL
$where1 = mktime(0 ,0,0,$month,1,$year);
$where2 = mktime(24,0,0,$month,date('t',$where1),$year);
$result = db_query("SELECT *
FROM prefix_kalender
WHERE ((time >= ".$where1." AND time < ".$where2.") OR id = ".$eid.")
AND ".$_SESSION['authright']." <= recht
ORDER BY time LIMIT 200");
while ($row = db_fetch_assoc($result)) {
$t_id = $row['id'];
$t_d = date('j', $row['time']);
$t_m = date('n', $row['time']);
$t_y = date('Y', $row['time']);
$date = mktime(0,0,0,$t_m,$t_d,$t_y);
$data_id[$t_id] = $row;
$data[$date][] = $row;
}
$ueid = 0;
if (substr($eid, 0, 3) == 999) {
$ueid = substr ($eid, 3);
}
$result = db_query("SELECT
name, gebdatum, id
FROM prefix_user
WHERE MONTH(gebdatum) = ".$month."
OR id = ".$ueid."
ORDER BY MONTH(gebdatum), DAYOFMONTH(gebdatum) LIMIT 200");
while ($r = db_fetch_assoc($result)) {
list($y,$m,$d) = explode('-',$r['gebdatum']);
$date = mktime(0,0,0,$m,$d);
$alter = date('Y') - $y;
$row = array(
'title' => $alter.'. Geburtstag von '.$r['name'],
'text' => 'Der '.$alter.'. Geburtstag von [url=http://'.($_SERVER["HTTP_HOST"].$_SERVER["SCRIPT_NAME"]).'?user-details-'.$r['id'].'][b]'.$r['name'].'[/b][/url]',
'time' => $date + 99,
'id' => '999'.$r['id'],
);
$data_id['999'.$r['id']] = $row;
$data[$date][] = $row;
}
if ($view == 0) {
$title_liste = $arr_month[$month].' '.$year;
} elseif ($view == 1 && !empty($gday)) {
$title_liste = 'Nur am '.$gday.' '.$arr_month[$month].' '.$year;
} elseif ($view == 1) {
$title_liste = 'Liste ab '.$arr_month[$month].' '.$year;
}
//Template Ausgabe
$aus['MONTH'] = $arr_month[$month];
$aus['YEAR'] = $year;
$aus['TITLE'] = ($eid) ? $data_id[$eid]['title'] : $title_liste;
$aus['TITLE_ALIGN'] = ($eid) ? '' : ' align="center"';
$tpl->set_ar_out($aus,0);
unset($aus);
//Deatilansicht
if ($eid) {
$aus['DEATIL_DATE'] = date('d.m.Y',$data_id[$eid]['time']);
$aus['DEATIL_TIME'] = date('H:i',$data_id[$eid]['time']);
$aus['DEATIL_TEXT'] = BBcode($data_id[$eid]['text']);
$tpl->set_ar_out($aus,2);
unset($aus);
}
//Liste der Tage (Monats-Ansicht)
elseif ($view == 0) {
for($i=0;$i<$days;$i++) {
$date = mktime(0,0,0,$month,$i+1,$year);
$text = '';
if (isset($data[$date])) {
foreach($data[$date] as $info) {
if($info['news_id'] == 0 || $info['news_id'] == ""){
$text .= '<a href="?kalender-v'.$view.'-e'.$info['id'].'">'.$info['title'].'</a>; ';
} else {
$text .= '<a href="?topnews-'.$info['news_id'].'">'.$info['title'].'</a>; ';
}
}
}
$aus['LIST_I'] = $i+1;
$aus['LIST_D'] = $arr_day[date('w',mktime(0,0,0,$month,$i+1,$year))];
$aus['LIST_T'] = $text;
$class = ($i % 2) ? 'Cnorm' : 'Cmite' ;
$aus['LIST_CLASS'] = ($i+1 == date('j') && $month == date('n') && $year == date('Y')) ? 'Cdark' : $class;
$tpl->set_ar_out($aus,1);
unset($aus);
}
}
//Liste der Tage (Listenansicht)
elseif ($view == 1) {
//Nur ein Tag
if (isset($data) && !empty($gday)) {
$date = mktime(0,0,0,$month,$gday,$year);
$i = 1;
if (isset($data[$date])) {
foreach($data[$date] as $info) {
$text = '';
if($info['news_id'] == 0 || $info['news_id'] == ""){
$text .= '<a href="?kalender-v'.$view.'-e'.$info['id'].'">'.$info['title'].'</a>; ';
} else {
$text .= '<a href="?topnews-'.$info['news_id'].'">'.$info['title'].'</a>; ';
}
$aus['LIST_I'] = $arr_day[date('w',$date)];
$aus['LIST_D'] = date('H:i',$info['time']);;
$aus['LIST_T'] = $text;
$class = ($i % 2) ? 'Cnorm' : 'Cmite' ;
$aus['LIST_CLASS'] = ($i+1 == date('j') && $month == date('n') && $year == date('Y')) ? 'Cdark' : $class;
$tpl->set_ar_out($aus,1);
unset($aus);
$i++;
}
}
//Ganze Liste
} elseif (isset($data)) {
$i = 1;
foreach($data as $date => $data1) {
$text = '';
foreach($data1 as $info) {
if($info['news_id'] == 0 || $info['news_id'] == ""){
$text .= '<a href="?kalender-v'.$view.'-e'.$info['id'].'">'.$info['title'].'</a>; ';
} else {
$text .= '<a href="?topnews-'.$info['news_id'].'">'.$info['title'].'</a>; ';
}
}
$aus['LIST_I'] = date('d.m.Y',$date);
$aus['LIST_D'] = $arr_day[date('w',$date)];
$aus['LIST_T'] = $text;
$class = ($i % 2) ? 'Cnorm' : 'Cmite' ;
$aus['LIST_CLASS'] = ($i+1 == date('j') && $month == date('n') && $year == date('Y')) ? 'Cdark' : $class;
$tpl->set_ar_out($aus,1);
unset($aus);
$i++;
}
} else {
$aus['LIST_I'] = '-';
$aus['LIST_D'] = '-';
$aus['LIST_T'] = '-';
$aus['LIST_CLASS'] = 'Cnorm';
$tpl->set_ar_out($aus,1);
unset($aus);
}
}
# kalender
$tpl->set('calender', getCalendar($month,$year, 'index.php?kalender-v1-m{mon}-y{jahr}-d{tag}', 'index.php?kalender-v'.$view.'-m{mon}-y{jahr}', $data));
$tpl->out(3);
$design->footer();
?>
Das sollte alles sein. Hoffe, dass es funktioniert und dass das das ist, was du suchst xD
Zuletzt modifiziert von kdl am 11.05.2011 - 23:05:43