- hotfix für einzelansicht der news modified: htaccess/cwsvjudo.bplaced.net/.htaccess new file: htaccess/cwsvjudo.bplaced.net/.htaccess-backup2018-08-14 - Hilfssfunktion für saubere Url modified: phpLib/cwsvJudo/miscAssis.php - news jetzt mit struturierten daten (article) modified: phpLib/cwsvJudo/newsLib.php modified: phpLib/cwsvJudo/newsTableHtml.php - kleinere korrekturen und erweiterungen: modified: phpLib/cwsvJudo/wkKalender.php modified: src/css/cwsvJudo-2018-layout.css modified: src/md/news.md modified: src/md/verein.md modified: wkParticipo/admin/newsLetter.php modified: wkParticipo/showWkEvent.php
184 lines
6.8 KiB
PHP
184 lines
6.8 KiB
PHP
<?php
|
|
|
|
function get_inner_html( $node ) {
|
|
$innerHTML= '';
|
|
$children = $node->childNodes;
|
|
foreach ($children as $child) {
|
|
$innerHTML .= $child->ownerDocument->saveXML( $child );
|
|
}
|
|
|
|
return $innerHTML;
|
|
}
|
|
|
|
/// Eine Liste mit News abfragen
|
|
///
|
|
/// Der Rückgabewert sollte vor Verwendung (und zur Fehlerbeheandlung)
|
|
/// auf NULL und/oder leeres Array getestet werden.
|
|
/// Der Zeichensatz wird von "ISO-8859-1" auf "UTF-8" gesetzt
|
|
///
|
|
/// @return Array mit News (die wiederum assoziative arrays sind
|
|
function getNews($aMysqlConn, $optionsArray = array("dbCharset" => "ISO-8859-1", "outCharset" => "UTF-8", "limit" => "1")){
|
|
if(!$aMysqlConn) return NULL;
|
|
|
|
if( empty($optionsArray['dbCharset']) ) $optionsArray['dbCharset'] = "ISO-8859-1";
|
|
if( empty($optionsArray['outCharset']) ) $optionsArray['outCharset'] = "UTF-8";
|
|
|
|
if( !is_positive_integer($optionsArray['limit']) ) $optionsArray['limit'] = "1";
|
|
|
|
$ret = array();
|
|
// Falls eine konkrete newsId angegeben wurde, wollen wir ab dieser News haben
|
|
if( is_positive_integer($optionsArray['newsId']) ){
|
|
$pdoStatementForQuerryingNews = $aMysqlConn->prepare(
|
|
"SELECT * FROM cwsvjudo.nachrichten WHERE nachrichten.datum <= (SELECT nachrichten.datum FROM nachrichten WHERE nachrichten.nr = :newsId ) ORDER BY nachrichten.datum DESC LIMIT :limit OFFSET 0;"
|
|
);
|
|
$pdoStatementForQuerryingNews->bindParam(':newsId', intval($optionsArray['newsId']), PDO::PARAM_INT);
|
|
}
|
|
// Ansonsten die aktuellsten
|
|
else{
|
|
$query = "SELECT * FROM nachrichten";
|
|
|
|
if( is_positive_integer($optionsArray['jahr']) )
|
|
$query .= " WHERE DATE_FORMAT( datum, '%Y') = :jahr";
|
|
|
|
$query .= " ORDER BY datum DESC, nr DESC LIMIT :limit;";
|
|
|
|
//echo( $query );
|
|
|
|
$pdoStatementForQuerryingNews = $aMysqlConn->prepare(
|
|
$query
|
|
);
|
|
}
|
|
|
|
$pdoStatementForQuerryingNews->bindParam(':limit', intval($optionsArray['limit']), PDO::PARAM_INT);
|
|
// $pdoStatementForQuerryingNews->bindParam(':jahr', intval($optionsArray['jahr']), PDO::PARAM_INT);
|
|
$pdoStatementForQuerryingNews->execute();
|
|
$ret = $pdoStatementForQuerryingNews->fetchAll(PDO::FETCH_ASSOC);
|
|
|
|
// Zeichensatzkonvertierung
|
|
foreach($ret as &$entry){
|
|
array_walk(
|
|
$entry,
|
|
function (&$value, $key, $optionsArray) {
|
|
$value = iconv($optionsArray['dbCharset'], $optionsArray['outCharset'], $value);
|
|
},
|
|
$optionsArray
|
|
);
|
|
}
|
|
|
|
return $ret;
|
|
}
|
|
|
|
/// Aus einer abgefragten News den htmlCode erzeugen
|
|
function getHtmlNews($aNews, $someOptions=""){
|
|
$options = getKeyValueArray($someOptions);
|
|
|
|
// schlechter Hack solange die Browser nicht von selbst ordentlich trennen
|
|
$aNews['betreff'] =
|
|
str_replace("meisterschaft", "­meisterschaft", $aNews['betreff']);
|
|
$aNews['betreff'] =
|
|
str_replace("turnier", "­turnier", $aNews['betreff']);
|
|
$aNews['betreff'] =
|
|
str_replace("randori", "­randori", $aNews['betreff']);
|
|
$aNews['betreff'] =
|
|
str_replace("spiele", "­spiele", $aNews['betreff']);
|
|
|
|
$retHtml = "";
|
|
$retHtml .= "<article class=\"newsArtikel\">";
|
|
$retHtml .= "<script type=\"application/ld+json\">".news2jsonSdArticle($aNews)."</script>";
|
|
$retHtml .= "<div class=\"newsHeader\">";
|
|
$retHtml .= "<div class=\"newsDatum\"><time datetime=\"" . $aNews['datum'] . "\">" . $aNews['datum'] . "</time></div>";
|
|
$retHtml .= "<div class=\"newsBetreff\" ><h".(!empty($options["headingLevel"])?$options["headingLevel"]:"3").">" . $aNews['betreff'] . "</h".(!empty($options["headingLevel"])?$options["headingLevel"]:"3")."></div>";
|
|
$retHtml .= "</div>";
|
|
$retHtml .= "<div class=\"newsBody\">";
|
|
|
|
// phpMyAdmin fügte manchmal die falschen Zeilenenden ein
|
|
$aNews['nachricht'] = str_replace("\r\n", "\n", $aNews['nachricht']);
|
|
|
|
// falls KEIN explizites PromoImage gesetzt ist, versuche es aus dem
|
|
// Nachrichtentext heraus zu lesen
|
|
// @toDo: woher bekomme ich width and height bei explizitem promoImg?
|
|
if( !filter_var($aNews['promoImg'], FILTER_VALIDATE_URL) || !filter_var($aNews['promoImg']['src'], FILTER_VALIDATE_URL) ){
|
|
$domDoc = new DOMDocument();
|
|
$domDoc->loadHTML( mb_convert_encoding($aNews['nachricht'], 'HTML-ENTITIES', "UTF-8") );
|
|
foreach($domDoc->getElementsByTagName('a') as $anchor){
|
|
$anchorDad = $anchor->parentNode;
|
|
foreach($anchor->getElementsByTagName('img') as $img){
|
|
$aNews['promoImg']['src'] = $img->getAttribute('src');
|
|
$aNews['promoImg']['alt'] = $img->getAttribute('alt');
|
|
$aNews['promoImg']['width'] = $img->getAttribute('width');
|
|
$aNews['promoImg']['height'] = $img->getAttribute('height');
|
|
$anchorDad->removeChild($anchor);
|
|
break;
|
|
}
|
|
$xpath = new DOMXPath($domDoc);
|
|
|
|
foreach( $xpath->query('//*[not(node())]') as $node ) {
|
|
$node->parentNode->removeChild($node);
|
|
}
|
|
|
|
$domDoc->formatOutput = true;
|
|
$aNews['nachricht'] = get_inner_html( $domDoc->getElementsByTagName('body')[0] );
|
|
// $aNews['nachricht'] = str_replace(" ", "", $aNews['nachricht']);
|
|
// var_dump($aNews);
|
|
}
|
|
}
|
|
|
|
if( !empty($aNews['promoImg']) ){
|
|
if( !empty($aNews['promoImg']['src']) ){
|
|
$retHtml .= "<img class=\"newsPromoImage\" "
|
|
."src=\"".$aNews['promoImg']['src']."\" "
|
|
.( empty($aNews['promoImg']['alt'])?"":("alt =\"".$aNews['promoImg']['alt']."\" ") )
|
|
."/>";
|
|
}
|
|
if( filter_var($aNews['promoImg'], FILTER_VALIDATE_URL) ){
|
|
$retHtml .= "<img class=\"newsPromoImage\" src=\"".$aNews['promoImg']."\" />";
|
|
}
|
|
|
|
// Für den Fall einer ampSeite müssen die imgTags angepasst werden
|
|
if( strpos( $_SERVER['ORIG_PATH_TRANSLATED'], "pages/amp" ) !== false ){
|
|
$retHtml = str_replace("<img", "<amp-img layout=\"responsive\" width=\"".($aNews['promoImg']['width']?$aNews['promoImg']['width']:"200")."\" height=\"".($aNews['promoImg']['height']?$aNews['promoImg']['height']:"133")."\"", $retHtml);
|
|
$retHtml = str_replace("/>", "></amp-img>", $retHtml);
|
|
}
|
|
}
|
|
$retHtml .= "<div class=\"newsText\">" . $aNews['nachricht'] . "</div>";
|
|
$retHtml .= "</div>";
|
|
$retHtml .= "<div class=\"newsFooter\">";
|
|
$retHtml .= "<div class=\"newsAutor\">".$aNews['autor']."</div>";
|
|
$retHtml .= "</div>";
|
|
$retHtml .= "</article>";
|
|
return $retHtml;
|
|
}
|
|
|
|
function news2jsonSdArticle($aNews){
|
|
return json_encode(
|
|
array(
|
|
'@context'=>"http://schema.org",
|
|
'@type'=>"NewsArticle",
|
|
'mainEntityOfPage'=>array(
|
|
'@type'=>"WebPage",
|
|
'@id'=>"https://cwsvjudo.bplaced.net/news/".$aNews['nr']."/".toAscii($aNews['datum']."-".$aNews['betreff'])
|
|
),
|
|
'headline'=>"Article headline",
|
|
'image'=>array(
|
|
"http://cwsvjudo.bplaced.net/ressourcen/graphiken/logos/cwsvJudoLogoWappen.256w.png"
|
|
),
|
|
'datePublished'=>$aNews['datum'],
|
|
'dateModified'=>$aNews['datum'],
|
|
'author'=>array(
|
|
'@type'=>"Person",
|
|
'name'=>$aNews['autor']
|
|
),
|
|
'publisher'=>array(
|
|
'@type'=>"Organization",
|
|
'name'=>"cwsvJudo",
|
|
'logo'=>array(
|
|
'@type'=>"ImageObject",
|
|
'url'=>"http://cwsvjudo.bplaced.net/ressourcen/graphiken/logos/cwsvJudoLogoWappen.256w.png"
|
|
)
|
|
),
|
|
'description'=>$aNews['betreff']
|
|
)
|
|
);
|
|
}
|
|
?>
|