Autor Zpráva
major M
Profil *
Dobrý den, na řádku 44 - 47 je funkce $key která je atipem u rss a můj problém spočívá v tom že u zdrojů, který $key nemají se nevypíše text ($desc).
Dle mého mínění řešení spočívá v podmínce else, ale neumím jí aplikovat prosím o radu.
P.S. je možné že řešení je jinde než u else (else je jen moje domněnka)

Zdroják:
<?php
error_reporting(0);
$indexi = 1;
foreach ($xml->channel as $channel){
if($indexi > 1){ break; }
$indexi++;    
$titlei = $channel->title; 
$languagei = $channel->language;
echo "<!--Začátek výpisu ze zdroje: ".$titlei.", Informace: jazyk - ".$languagei.",-->";  
} 
echo $hlavicka;
$indexh = 1;
foreach ($xml->channel->image as $image){
if($indexh > 1){ break; }
$indexh++;    
$urlh = $image->url;
$width = $image->width;
$heighth = $image->height;
$linkh = $image->link;
echo "<a href=\"".$linkh."\" target=\""._blank."\"><img src=\"".$urlh."\" width=\"".$width."\" height=\"".$heighth."\" class=\"".paddinga."\"></a>";
} 
if($indexh == 1) echo "&nbsp;?&nbsp;";
$indext = 1;
foreach ($xml->channel as $channel){
if($indext > 1){ break; }
$indext++;    
$linkt = $channel->link;
$titlet = $channel->title; 
echo "<a href=\"".$linkt."\" target=\""._blank."\">".$titlet."</a>"; 
} 
echo $hlavickakonec; 
echo $pole; 
$index = 1;
foreach ($xml->channel->item as $item){
if (strtotime($item->pubDate) < strtotime("-24 hours"))
        break;
$index++;
$date = $item->pubDate;
$link = $item->link;
$link = $item->guid;
$title = $item->title;
$desc = $item->description;
$enclosure = $item->enclosure->url;
$keywords = explode(',', (string) $item->keywords);
$replaceWith = array();
foreach ($keywords as $key)
  $replaceWith[$key] = "<b>$key</b>";
$desc = strtr($desc, $replaceWith);
$date = strtotime($date);
$date = StrFTime("%d. %m. %Y", $date);
$date = str_replace(". 0", ". ", $date);
$num = strlen($date);
if(substr($date, 0, 1) == "0") $date = substr($date, 1, $num);
echo $date." - <a href=\"".$link."\" target=\""._blank."\">".$title."</a>";
echo "<br />".strip_tags ($desc, '<b>')."".$enclosure."<br /><br />";
}
if($index == 1) echo "Nejsou nové zprávy";
echo $polekonec; 
$indexk = 1;
foreach ($xml->channel as $channel){
if($indexk > 1){ break; }
$indexk++;    
$titlek = $channel->title; 
echo "<!--Konec výpisu zdroje: ".$titlek."-->";  
} 
?>


Podmínka else (asi takto podobně):
$keywords = explode(',', (string) $item->keywords);
$replaceWith = array();
foreach ($keywords as $key){
  if($key){
    $replaceWith[$key] = "<b>$key</b>";
    }
  else{
     $replaceWith[$key] = $key;
     }
ShiraNai7
Profil
To je celkem nesmysl. Jak může položka "nemít" $key, když v případě, že je $keywords prázdné, se pouze neprovedou žádná nahrazení? Nevidím vztah mezi tímto a nevypsáním $desc.
major M
Profil *
víte jak vypadá rss tak si v něm přestavte další funkci key to je to co hledáte
<item>
      <title>Thunderbird definitivně na druhé koleji. Mozilla se ho tiše zbavuje</title>
      <link>http://www.zive.cz/bleskovky/thunderbird-definitivne-na-druhe-koleji-mozilla-se-ho-tise-zbavuje/sc-4-a-156506/default.aspx</link>
      <guid>http://www.zive.cz/default.aspx?article=156506</guid>
      <description>Před čtyřmi lety chtěla Mozilla po velkém úspěchu Firefoxu zužitkovat i potenciál pošťáka Thunderbird. Byla to tehdy jedna z mála volně dostupných alternativ Outlooku a to v podstatě platí dodnes. Tedy platí to druhé, ale z toho prvního – ze snahy ve velkém prodat i Thunderbird – nezůstal kámen na ...</description>
      <keywords>Mozilla, Thunderbird</keywords>
      <pubDate>Tue, 29 Jun 2011 12:37:00 GMT</pubDate>
    </item>
Tori
Profil
Spíš by měly být v podmínce řádky 44-48:
$keywords = explode(',', (string) $item->keywords);
if (!empty($keywords))  {
  $replaceWith = array();
  foreach ($keywords as $key)
    $replaceWith[$key] = "<b>$key</b>";
  $desc = strtr($desc, $replaceWith);
}

Řádky 49-51 se dají zkrátit do jednoho
$date = date("j. n. Y", strtotime($date));

Můžu se jen ze zvědavosti zeptat, odkud máte ten kód? Už ho tu na diskusi vidím asi potřetí, stále stejně špatně čitelný.

↓ Ó, děkuji! (A ještě kdyby všichni další zájemci už kopírovali jen vaši verzi, to bych byla teprv šťastná) :)
ShiraNai7
Profil
major M:
víte jak vypadá rss tak si v něm přestavte další funkci key to je to co hledáte

Teď už vůbec nechápu o co jde. Funkce v RSS? Tag <keywords>? Psal jsem, že pokud je $keywords prázdné, tak by to nemělo mít na nic vliv.
Jinak to error_reporting(0) je taky pěkně hnusný postup.

Tori:
Už ho tu na diskusi vidím asi potřetí, stále stejně špatně čitelný.

Čitelnější verze:
<?php
error_reporting(0);
$indexi = 1;
foreach($xml->channel as $channel) {
	if($indexi > 1) {
		break;
	}
	$indexi++;
	$titlei = $channel->title;
	$languagei = $channel->language;
	echo "<!--Začátek výpisu ze zdroje: ".$titlei.", Informace: jazyk - ".$languagei.",-->";
}
echo $hlavicka;
$indexh = 1;
foreach($xml->channel->image as $image) {
	if($indexh > 1) {
		break;
	}
	$indexh++;
	$urlh = $image->url;
	$width = $image->width;
	$heighth = $image->height;
	$linkh = $image->link;
	echo "<a href=\"".$linkh."\" target=\""._blank."\"><img src=\"".$urlh."\" width=\"".$width."\" height=\"".$heighth."\" class=\"".paddinga."\"></a>";
}
if($indexh == 1) echo "&nbsp;?&nbsp;";
$indext = 1;
foreach($xml->channel as $channel) {
	if($indext > 1) {
		break;
	}
	$indext++;
	$linkt = $channel->link;
	$titlet = $channel->title;
	echo "<a href=\"".$linkt."\" target=\""._blank."\">".$titlet."</a>";
}
echo $hlavickakonec;
echo $pole;
$index = 1;
foreach($xml->channel->item as $item) {
	if(strtotime($item->pubDate) < strtotime("-24 hours")) break;
	$index++;
	$date = $item->pubDate;
	$link = $item->link;
	$link = $item->guid;
	$title = $item->title;
	$desc = $item->description;
	$enclosure = $item->enclosure->url;
	$keywords = explode(',', (string )$item->keywords);
	$replaceWith = array();
	foreach($keywords as $key) $replaceWith[$key] = "<b>$key</b>";
	$desc = strtr($desc, $replaceWith);
	$date = strtotime($date);
	$date = StrFTime("%d. %m. %Y", $date);
	$date = str_replace(". 0", ". ", $date);
	$num = strlen($date);
	if(substr($date, 0, 1) == "0") $date = substr($date, 1, $num);
	echo $date." - <a href=\"".$link."\" target=\""._blank."\">".$title."</a>";
	echo "<br />".strip_tags($desc, '<b>')."".$enclosure."<br /><br />";
}
if($index == 1) echo "Nejsou nové zprávy";
echo $polekonec;
$indexk = 1;
foreach($xml->channel as $channel) {
	if($indexk > 1) {
		break;
	}
	$indexk++;
	$titlek = $channel->title;
	echo "<!--Konec výpisu zdroje: ".$titlek."-->";
}

?>
major M
Profil *
I po upravě kodu 44 -48
$keywords = explode(',', (string) $item->keywords);
if (!empty($keywords))  {
  $replaceWith = array();
  foreach ($keywords as $key)
    $replaceWith[$key] = "<b>$key</b>";
  $desc = strtr($desc, $replaceWith);
}

Pořád při apsenci podmínky keywords v rss zdroji - nevypisuje text
major M
Profil *
error_reporting(0);
jsem odstranil a místo 49 - 51 řádku je
$date = date("j. n. Y", strtotime($date));
major M
Profil *
Tori - kód jsem získal z www.tvorba-webu.cz/php/php-xml.php, ale již je po spouště inovací
major M
Profil *
A ještě by u tý podmínky podle mně mohlo fungovat to to

pokuď je keywords proveď tyto operace (ztučnění) a pokuď není vypiš desc normálně a nic s ním nedělej
major M
Profil *
Teď jsem si všiml že by to mohlo mít něco společného s $enclosure v původním kódě na 43 řádku a v tom "přehlednějším" na 48 řádku.
Moderátor Alphard: Berte v úvahu, že tady není chat, zamyslete se nad problémem, zkuste ho s pomocí rad vyřešit a pak případně napiště v dalším uceleném příspěvku doplňující informace nebo dotazy.
major M
Profil *
možná v té upravě by místo empty mněl být aplikovaný isset
major M
Profil *
Mohli by jste se prosím někdo podívat na toto řešení taky nefunguje, ale přijdemi že už jsem blízko
$keywords = explode(',', (string) $item->keywords);
if (!isset($keywords)) {
$desc = strtr($desc, $replaceWith);
}
else {
$replaceWith = array();
foreach ($keywords as $key)
$replaceWith[$key] = "<b>$key</b>";
$desc = strtr($desc, $replaceWith);
}
ShiraNai7
Profil
major M:
if (!isset($keywords)) {

1) Nesmysl - $keywords je vždy pole, tj tato podmínka vždy projde.
2) I kdyby prošla, tak se použije strtr s prázdným $replaceWith = stejný efekt jako kdyby neprošla (celá podmínka je zbytečná)
3) Potřetí píšu, že toto nahrazování nemůže způsobit, že se $desc nevypíše... taky jsem se doteď nedozvěděl, jestli se nevypíše vůbec nebo zda se vypíše prázdný tag nebo jak?
4) Hlásí to nějakou PHP chybu? Samozřejmě za předpokladu, že tam stále není error_reporting(0). Zkus to vyměnit za error_reporting(E_ALL).
5) Nechci být nepříjemný, ale zřejmě nemáš základní znalosti a představu o tom, co se ve skriptu děje.
Tori
Profil
Jen drobnost:
ShiraNai7:
Potřetí píšu, že toto nahrazování nemůže způsobit, že se $desc nevypíše
V případě [#12] (větěv if) už ano. Pokud je 2.param. prázdné pole, tak funkce vrátí beze změny vstupní text. Pokud to není pole, vrací false + E_WARNING.
major M
Profil *
ShiraNai7:
4) nehlásí, repor ting už tam není, s e-all to vyhodí
Notice: Use of undefined constant _blank - assumed '_blank' in /data/web/virtuals/4868/virtual/www/key/rss_nastroje/rss_agregator.php on line 56
major M
Profil *
Tori:
promiň, ale tobě nerozumím
P.S. já umím jen úplné základy a vše chápu jen polopatě
major M
Profil *
Dobrý den, myslím že dle tohodle prikazu by to šlo ale neumím ho aplikovat mohli by jste to prosím někdo skusit nějak spojit
// Evaluates to true because $var is empty
if (empty($keywords)) {
    echo '$var is either 0, empty, or not set at all';
}

// Evaluates as true because $var is set
if (isset($keywords)) {
    echo '$var is set even though it is empty';
}

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0