Welcome, Guest. Please login or register.
Did you miss your activation email?
May 25, 2012, 01:31:08 AM

Login with username, password and session length
Search:     Advanced search
Interested in joining the WebsiteBaker team?
For more Information read here or on our new website.
155476 Posts in 21708 Topics by 7734 Members
Latest Member: rofroodoOvego
* Home Help Search Login Register
Pages: [1]   Go Down
Print
Author Topic: rss.php - Seiten-Beschreibung wenn Content-Text leer ?  (Read 859 times)
andyhaiger

Offline Offline

Posts: 34


WWW
« on: December 25, 2008, 02:21:27 PM »

Hallo

ich benötige Hilfe und möchte im unteren rss.php eine Funktion, dass bei leerem (fehlenden Text) Content-Text, dann der Seiten-Beschreibungs-Text eingeblendet wird. Habe aber in PHP Programmierenung zu wenig Erfahrung. Wer kann mir weiter helfen ?

Im aktuellen rss.php seht Ihr bei "Supportanfrage", keinen Conten-Text. Hier habe ich in der Seitenbeschreibung einen Text hinterlegt, der nun als rss-Text eingeblentet werden soll, aber nur, wenn kein Content-Text forhanden ist.

http://www.dupp.de/rss.php

Code:
<?php
require_once('config.php');
require_once(
WB_PATH.'/framework/class.frontend.php');
header("Content-type: text/xml; charset=utf-8" );
echo(
stripslashes('\<\?xml version=\"1.0\" encoding=\"utf-8\"\?\>'));
$number_articles 5;
$number_text 250;
?>

<rss version="2.0">
  <channel>
    <title><?php echo WEBSITE_TITLE?> - RSS Feed</title>
    <link><?php echo WB_URL?></link>
    <description><?php echo WEBSITE_DESCRIPTION?></description>
    <category><?php echo WEBSITE_TITLE?></category>
    <language><?php echo DEFAULT_LANGUAGE?></language>
    <managingEditor><?php echo SERVER_EMAIL?></managingEditor>
    <webMaster><?php echo SERVER_EMAIL?></webMaster>
    <?php
    $database 
= new database();
    
$query "SELECT * FROM ".TABLE_PREFIX."pages WHERE visibility='public' ORDER BY modified_when DESC LIMIT ".$number_articles;
    
$result $database->query($query);
    while(
$item $result->fetchRow($result)){
    
$author_database = new database();
    
$user $item["modified_by"];
    
$author_query "SELECT * FROM ".TABLE_PREFIX."users WHERE user_id=".$user;
    
$author_result $author_database->query($author_query);
    
$author $author_result->fetchRow($author_database);    
    
$content_page $item["page_id"];    
    
$build_database = new database();
    
$build_query "SELECT * FROM ".TABLE_PREFIX."pages WHERE page_id=".$content_page;
    
$build_result $build_database->query($build_query);
    
$build $build_result->fetchRow($build_database);
    
$when $build["modified_when"];    
    
$content_database = new database();    
    
$content_query "SELECT * FROM ".TABLE_PREFIX."mod_wysiwyg WHERE page_id=".$content_page;
    
$content_result $content_database->query($content_query);
    
$content $content_result->fetchRow($content_database);
    
$content_text substr($content["text"],0,$number_text);
    
?>

    <item>
      <title><?php echo stripslashes($item["page_title"]); ?></title>
      <description><?php echo htmlentities($content_text); ?>  ...</description>
      <link><?php echo WB_URL."/pages".$item["link"].PAGE_EXTENSION?></link><pubDate><?php echo date("r",$when); ?></pubDate><author><?php echo ($author["username"]." &lt;".$author["email"]."&gt;"); ?></author></item><?php ?>   
  </channel> 
</rss>
Logged
aldus

Offline Offline

Posts: 1238


« Reply #1 on: December 25, 2008, 02:52:25 PM »

Hallo andy

Wege gibt es einige ...
Du kannst z.B. mit "strlen" nachsehen, ob überhaubt was im content steht,
und wenn nicht auf die PAGE_DESCRIPTION zurückgreifen ...

Code:
<description><?php echo strlen($content_text) > htmlentities($content_text)." ..." PAGE_DESCRIPTION?></description>

Ob allerdings nun auch die PAGE_DESCRIPTION noch mal geparst werden muss, weiss ich heute aus dem Bauch
heraus leider auch nicht ... einfach mal probieren ...

Gruß
Aldus
Logged
andyhaiger

Offline Offline

Posts: 34


WWW
« Reply #2 on: December 26, 2008, 07:51:50 AM »

Hallo Aldus

ich habe mal getestet, aber bringt noch Gehler mit PAGE_DESCRIPTION.
Habe keine Ahnung wie ich diese vorher anspreche ?
Kannst du ggfl. mal selber Testen, einfach rss.php im Root von WB kopieren und aufrufen.


Code:
<?php
require_once('config.php');
require_once(
WB_PATH.'/framework/class.frontend.php');
header("Content-type: text/xml; charset=utf-8" );
echo(
stripslashes('\<\?xml version=\"1.0\" encoding=\"utf-8\"\?\>'));
$number_articles 5;
$number_text 250;
?>

<rss version="2.0">
  <channel>
    <title><?php echo WEBSITE_TITLE?> - RSS Feed</title>
    <link><?php echo WB_URL?></link>
    <description><?php echo WEBSITE_DESCRIPTION?></description>
    <category><?php echo WEBSITE_TITLE?></category>
    <language><?php echo DEFAULT_LANGUAGE?></language>
    <managingEditor><?php echo SERVER_EMAIL?></managingEditor>
    <webMaster><?php echo SERVER_EMAIL?></webMaster>
    <?php
    $database 
= new database();
    
$query "SELECT * FROM ".TABLE_PREFIX."pages WHERE visibility='public' ORDER BY modified_when DESC LIMIT ".$number_articles;
    
$result $database->query($query);
    while(
$item $result->fetchRow($result)){
    
$author_database = new database();
    
$user $item["modified_by"];
    
$author_query "SELECT * FROM ".TABLE_PREFIX."users WHERE user_id=".$user;
    
$author_result $author_database->query($author_query);
    
$author $author_result->fetchRow($author_database);    
    
$content_page $item["page_id"];    
    
$build_database = new database();
    
$build_query "SELECT * FROM ".TABLE_PREFIX."pages WHERE page_id=".$content_page;
    
$build_result $build_database->query($build_query);
    
$build $build_result->fetchRow($build_database);
    
$when $build["modified_when"];    
    
$content_database = new database();    
    
$content_query "SELECT * FROM ".TABLE_PREFIX."mod_wysiwyg WHERE page_id=".$content_page;
    
$content_result $content_database->query($content_query);
    
$content $content_result->fetchRow($content_database);
    
$content_text substr($content["text"],0,$number_text);
    
?>

    <item>
      <title><?php echo stripslashes($item["page_title"]); ?></title>
<description><?php echo strlen($content_text) > htmlentities($content_text)." ..." PAGE_DESCRIPTION?></description>

      <link><?php echo WB_URL."/pages".$item["link"].PAGE_EXTENSION?></link><pubDate><?php echo date("r",$when); ?></pubDate><author><?php echo ($author["username"]." &lt;".$author["email"]."&gt;"); ?></author></item><?php ?>   
  </channel> 
</rss>
Logged
aldus

Offline Offline

Posts: 1238


« Reply #3 on: December 26, 2008, 10:00:09 AM »

Hallo

Zum Zeitpunkt an dem das Script aufgerufen wird ist die Konstante "PAGE_DESCRIPTION"
nicht definiert ... Du kannst dir aber die Seitenbeschreibung aus dem query herausholen;
$item['description'] ....

Code:
<?php

/**
 *    rss.php
 *
 *    @version    0.2.0
 *    @date        2008-12-26
 *    @author        U.a. Dietrich Roland Pehlke (aldus)
 *    @package    WebsiteBaker - utilities
 *
 *    
 */

require_once('config.php');
require_once(
WB_PATH.'/framework/class.frontend.php');
header("Content-type: text/xml; charset=utf-8" );
echo(
stripslashes('\<\?xml version=\"1.0\" encoding=\"utf-8\"\?\>'));
$number_articles 10;
$number_text 250;
?>

<rss version="2.0">
  <channel>
    <title><?php echo WEBSITE_TITLE?> - RSS Feed</title>
    <link><?php echo WB_URL?></link>
    <description><?php echo WEBSITE_DESCRIPTION?></description>
    <category><?php echo WEBSITE_TITLE?></category>
    <language><?php echo DEFAULT_LANGUAGE?></language>
    <managingEditor><?php echo SERVER_EMAIL?></managingEditor>
    <webMaster><?php echo SERVER_EMAIL?></webMaster>
    <?php
    $database 
= new database();
    
$query "SELECT * FROM ".TABLE_PREFIX."pages WHERE visibility='public' ORDER BY modified_when DESC LIMIT ".$number_articles;
    
$result $database->query($query);
while(
$item $result->fetchRow($result)){
    
$author_database = new database();
    
$user $item["modified_by"];
    
$author_query "SELECT * FROM ".TABLE_PREFIX."users WHERE user_id=".$user;
    
$author_result $author_database->query($author_query);
    
$author $author_result->fetchRow($author_database);    
    
$content_page $item["page_id"];    

    
$content_database = new database();    
    
$content_query "SELECT * FROM ".TABLE_PREFIX."mod_wysiwyg WHERE page_id=".$content_page;
    
$content_result $content_database->query($content_query);
    
$content $content_result->fetchRow($content_database);
    
$content_text utf8_decode(substr($content["text"],0,$number_text));
    
    if (
strlen($item['description']) == 0
        
$item['description'] = "<font color='#990000'><i>no page description found</i></font>";
    
    
?>

    <item>
        <title><?php echo stripslashes($item["page_title"]); ?></title>
        <description><?php echo htmlentities strlen($content_text) > $content_text." ..." utf8_decode($item['description']) ); ?></description>
        <link><?php echo WB_URL."/pages".$item["link"].PAGE_EXTENSION?></link>
        <pubDate><?php echo date("r"$item['modified_when']); ?></pubDate>
        <author><?php echo ($author["username"]." &lt;".$author["email"]."&gt;"); ?></author>
    </item>
<?php ?>   
  </channel> 
</rss>

Ebenso musst Du m.W. wenn Du utf8 ausgeben willst erst die einzelnen Strings aus der DB mit uft8_decode
parsen ...

Gruß
Aldus
Logged
andyhaiger

Offline Offline

Posts: 34


WWW
« Reply #4 on: December 26, 2008, 12:29:10 PM »

Hallo Aldus

mmmm....., soweit so gut, bringt aber in meine Umgebung noch eine fehlerhafte Ausgabe.
http://www.dupp.de/rss.php
Logged
aldus

Offline Offline

Posts: 1238


« Reply #5 on: December 26, 2008, 12:33:37 PM »

Und was ist daran fehlerhaft?

Sieht, zumindest für mich, ok aus ... (siehe image im anhang)

Gruß
Aldus

Edit: Bild 2 ist aus der lokalen Testumgebung ... Umlaute aud Aufbau so weit ok ...
« Last Edit: December 26, 2008, 01:03:10 PM by aldus » Logged
andyhaiger

Offline Offline

Posts: 34


WWW
« Reply #6 on: December 26, 2008, 01:06:22 PM »

Sieht gut aus, aber ich glaube du benutzt Firefox !

Mit Chrom, Opera und IE7 kommen unterschiedliche Fehler. Siehe Anlage !
Logged
aldus

Offline Offline

Posts: 1238


« Reply #7 on: December 26, 2008, 01:19:55 PM »

Firefox und Safari; aber egal: dann schmeiss die HTML_ENTITIES halt raus ...
Hast Du die php-Datei auch als utf-8 abgespeichert?

Code:
<description><?php echo strlen($content_text) > $content_text." ..." utf8_decode($item['description']); ?></description>


oder, ein wenig modifiziert halt:
Code:
<?php

/**
 *    rss.php
 *
 *    @version    0.3.0
 *    @date        2008-12-26
 *    @author        U.a. Dietrich Roland Pehlke (aldus)
 *    @package    WebsiteBaker - utilities
 *    @format        utf8 (no BOM) - Unix (LF)
 *
 *    
 */

require_once('config.php');
require_once(
WB_PATH.'/framework/class.frontend.php');
header("Content-type: text/xml; charset=utf-8" );

echo(
stripslashes('\<\?xml version=\"1.0\" encoding=\"utf-8\"\?\>'));

$number_articles 10;
$number_text 250;
$no_page_description "<font color='#AA0000'><i>no page description found</i></font>";

echo 
"<rss version='2.0'>\n<channel>\n
    <title>"
WEBSITE_TITLE ." - RSS Feed</title>
    <link>"
WB_URL ."</link>
    <description>"
.    WEBSITE_DESCRIPTION ."</description>
    <category>"
WEBSITE_TITLE ."</category>
    <language>"
DEFAULT_LANGUAGE ."</language>
    <managingEditor>"
SERVER_EMAIL ."</managingEditor>
    <webMaster>"
SERVER_EMAIL ."</webMaster>\n";

$database = new database();

$query  "SELECT page_id,page_title,modified_by,modified_when,description,link FROM ".TABLE_PREFIX."pages ";
$query .= "WHERE visibility='public' ORDER BY modified_when DESC LIMIT ".$number_articles;

$result $database->query($query);
        
while(
$item $result->fetchRow()) {
    
    
$author_result $database->query"SELECT username,email FROM ".TABLE_PREFIX."users WHERE user_id=".$item["modified_by"] );
    
$author $author_result->fetchRow();    
    
    
$content_result $database->query"SELECT text FROM ".TABLE_PREFIX."mod_wysiwyg WHERE page_id=".$item["page_id"] );
    if (
$content_result->numRows() > 0) {
        
$content $content_result->fetchRow();
        
$content_text utf8_decode(substr($content["text"],0,$number_text)." ...");
    } else {
        
$content_text "";
        if (
strlen($item['description']) == 0$item['description'] = $no_page_description;
    }
    
    
$item_content = array (
        
'TITLE'            => stripslashes($item["page_title"]),
        
'DESCRIPTION'    => strlen($content_text) > $content_text utf8_decode($item['description']),
        
'LINK'            => WB_URL."/pages".$item["link"].PAGE_EXTENSION,
        
'PUBDATE'        => date("r"$item['modified_when']),
        
'AUTHOR'        => $author["username"]." &lt;".$author["email"]."&gt;"
    
);
    
extract ($item_content);
    
    echo 
"<item>
            <title>
$TITLE</title>
            <description>
$DESCRIPTION</description>
            <link>
$LINK</link>
            <pubDate>
$PUBDATE</pubDate>
            <author>
$AUTHOR</author>
        </item>\n"
;

}
echo 
"</channel>\n</rss>\n";

?>



Evtl. fangen die drei dann bei "no_page_description" zu meckern, aber den string kannst Du dann ja leicht anpassen.

Edit: Kennst Du eigentlich den "rss-site-feeder"?
http://www.websitebakers.com/pages/code-snippets/listings/rss-site-feeder.php


Gruß
Aldus
« Last Edit: December 26, 2008, 01:31:28 PM by aldus » Logged
aldus

Offline Offline

Posts: 1238


« Reply #8 on: December 26, 2008, 04:35:47 PM »

Nachtrag:
Opera hat sich hier nicht überzeugen lassen (MacOs 10.5.6 / MAMP 1.7.1);
solange noch im Text/in der Description auch nur eine entity drin ist, geht's nicht.

Unter "framework/functions-utf8.php" gibt's die Funktion "entities_to_umlauts 2", und
nachdem ich auch noch das "&nbsp;" rausgeworfen habe, gehts nun auch in Opera ...

Hier noch mal //das volle Gedicht//
Code:
<?php

/**
 *    rss.php
 *
 *    @version    0.5.0
 *    @date        2008-12-26
 *    @author        U.a. Dietrich Roland Pehlke (aldus)
 *    @package    WebsiteBaker - utilities
 *    @format        utf8 (no BOM) - Unix (LF)
 *
 *    
 */

require_once('config.php');
require_once(
WB_PATH.'/framework/class.frontend.php');
require_once(
WB_PATH.'/framework/functions-utf8.php');
header("Content-type: text/xml; charset=utf-8" );

echo(
stripslashes('\<\?xml version=\"1.0\" encoding=\"utf-8\"\?\>'));

$number_articles 10;
$number_text 250;
$no_page_description "<font color='#AA0000'><i>no page description found</i></font>";

echo 
"<rss version='2.0'>\n<channel>\n
    <title>"
WEBSITE_TITLE ." - RSS Feed</title>
    <link>"
WB_URL ."</link>
    <description>"
.    WEBSITE_DESCRIPTION ."</description>
    <category>"
WEBSITE_TITLE ."</category>
    <language>"
DEFAULT_LANGUAGE ."</language>
    <managingEditor>"
SERVER_EMAIL ."</managingEditor>
    <webMaster>"
SERVER_EMAIL ."</webMaster>\n";

$database = new database();

$query  "SELECT page_id,page_title,modified_by,modified_when,description,link FROM ".TABLE_PREFIX."pages ";
$query .= "WHERE visibility='public' ORDER BY modified_when DESC LIMIT ".$number_articles;

$result $database->query($query);
        
while(
$item $result->fetchRow()) {
    
    
$author_result $database->query"SELECT username,email FROM ".TABLE_PREFIX."users WHERE user_id=".$item["modified_by"] );
    
$author $author_result->fetchRow();    
    
    
$content_result $database->query"SELECT text FROM ".TABLE_PREFIX."mod_wysiwyg WHERE page_id=".$item["page_id"] );
    if (
$content_result->numRows() > 0) {
        
$content $content_result->fetchRow();
        
$content_text utf8_decode(substr($content["text"],0,$number_text)." ...");
    } else {
        
$content_text "";
        if (
strlen($item['description']) == 0$item['description'] = $no_page_description;
    }
    
    
$description strlen($content_text) > $content_text utf8_decode($item['description']);
    
$description str_replace("&nbsp;"""entities_to_umlauts2$description ) );
    
    
$item_content = array (
        
'TITLE'            => stripslashes($item["page_title"]),
        
'DESCRIPTION'    => $description,
        
'LINK'            => WB_URL."/pages".$item["link"].PAGE_EXTENSION,
        
'PUBDATE'        => date("r"$item['modified_when']),
        
'AUTHOR'        => $author["username"]." &lt;".$author["email"]."&gt;"
    
);
    
extract ($item_content);
    
    echo 
"<item>
            <title>
$TITLE</title>
            <description>
$DESCRIPTION</description>
            <link>
$LINK</link>
            <pubDate>
$PUBDATE</pubDate>
            <author>
$AUTHOR</author>
        </item>\n"
;

}
echo 
"</channel>\n</rss>\n";

?>


Hope it helps

Gruß
Aldus
Logged
andyhaiger

Offline Offline

Posts: 34


WWW
« Reply #9 on: December 27, 2008, 09:58:03 AM »

Moin

soweit fast alles Super. Chrome, Firefox, Safari und Opera geht. IE7 leider gar nicht, bringt sofort einen Seitenfehler.
Habe eben nochmal auf einem zweiten Rechner mit IE7 getestet der den gleichen Fehler bringt.

Ansonsten genau wie ich es brauche.
Logged
aldus

Offline Offline

Posts: 1238


« Reply #10 on: December 27, 2008, 10:14:58 AM »

Quote
IE7 leider gar nicht, bringt sofort einen Seitenfehler.

Leider habe ich meinen magischen Kristall an den Weihnachtsmann verliehen,
und der ist nun im Urlaub ...
könntest Du bitte etwas mehr details dazu geben?
//Seitenfehler// ist mir einfach zu ungenau

Edit
Ok ... bei mir fängt der IE beim ersten "ö" schon an zu maulen, kann sein, das er lieber entities mag,
daher es vieleicht einfach bei den beiden Zeilen wo die $description zusammengebaut wird, mal so versuchen:
Code:
<?php

$description 
strlen($content_text) > $content_text utf8_decode($item['description']);
    
if (
strpos($_SERVER['HTTP_USER_AGENT'],"MSIE") == 0)
        
$description str_replace("&nbsp;"""entities_to_umlauts2$description ) );


Gruß
Aldus
« Last Edit: December 27, 2008, 11:45:21 AM by aldus » Logged
Pages: [1]   Go Up
Print
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines Valid XHTML 1.0! Valid CSS!