Cron písaný v php do nette
- Tomas8698
- Člen | 109
Zdravím mam cron, ktory bol písaný v čistom php, podla návodu co som
našiel na Google tak som si pripravi presenter aby fungoval. Chcel by som sa
opytat ako upraviť kod cronu aby fungoval v nette.
Cron ktorý chcem použiť ma zo stránky vyberať aktuálne recenzie a vkladať
na moju stránku. Chcem sa spýtať ako kod treba upraviť aby bol
funkčný.
Za pomoc dakujem
Stranka na githube: https://github.com/…ron/cron.php
Moj cron zatial vyzera takto:
<?php
<?php
namespace App\Cron;
use DOMDocument;
use XMLReader;
include "CronBase.php";
class NavolneNoze extends CronBase
{
$file = fopen($_SERVER['DOCUMENT_ROOT'] . "/temp/navolnenoze-rss.html", "w");
$rss = simplexml_load_file('https://navolnenoze.cz/prezentace/josef-jebavy/doporuceni/rss/');
//$str= '<h2>'. $rss->channel->title . '</h2>';
$str = '<div id="doporuceni1" class="text" style="display: none">';
$str .= '<p>Výpis doporučení z portálu <a href="https://navolnenoze.cz/prezentace/josef-jebavy/doporuceni/"
target="_blank">Na volné noze</a>';
foreach ($rss->channel->item as $item)
{
if (empty($item->link))
{
$link = "https://navolnenoze.cz/prezentace/josef-jebavy/doporuceni/";
}
else
{
$link = $item->link;
}
$str .= '<div class="about">';
$str .= '<h3><a href="' . $link . '">' . $item->title . "</a></h3>";
// $str.= "<p>" . $item->pubDate . "</p>";
$str .= "<p>" . $item->description . "</p>";
$str .= '</div>';
}
$str .= '</div>';
echo $str;
fwrite($file, $str);
//-----------
fclose($file);
}
?>
- neznamy_uzivatel
- Člen | 115
Používám cca tohle:
namespace App\Cron;
use Nette\Database\Context;
$container = require __DIR__ . '/../bootstrap.php';
/** @var Context $database */
$database = $container->getByType('\Nette\Database\Context');
$file = fopen($_SERVER['DOCUMENT_ROOT'] . "/temp/navolnenoze-rss.html", "w");
$rss = simplexml_load_file('https://navolnenoze.cz/prezentace/josef-jebavy/doporuceni/rss/');
...
Editoval neznamy_uzivatel (11. 3. 2021 8:02)
- neznamy_uzivatel
- Člen | 115
Dále doporučuju tento článek https://blog.nette.org/…tte-aplikaci (a nevynechat komentář pod ním…)
- Tomas8698
- Člen | 109
Ďakujem prečítam si a chcem sa spýtať ešte, ja v tomto databazu nepoužívam môžem ten riadok:
<?php
/** @var Context $database */
$database = $container->getByType('\Nette\Database\Context');
?>
Zmazať to alebo to robi nieco ine? Tam nižšie ako mam tak tam si pýtam
Mena a komentáre od užívateľov, ktorý komentovali na stránke
navolnenoze.cz
A ešte som sa chcel spýtať ci tu časť nechať alebo ju upraviť aby bola
správna v nette.
<?php
//$str= '<h2>'. $rss->channel->title . '</h2>';
$str = '<div id="doporuceni1" class="text" style="display: none">';
$str .= '<p>Výpis doporučení z portálu <a href="https://navolnenoze.cz/prezentace/josef-jebavy/doporuceni/"
target="_blank">Na volné noze</a>';
foreach ($rss->channel->item as $item)
{
if (empty($item->link))
{
$link = "https://navolnenoze.cz/prezentace/josef-jebavy/doporuceni/";
}
else
{
$link = $item->link;
}
$str .= '<div class="about">';
$str .= '<h3><a href="' . $link . '">' . $item->title . "</a></h3>";
// $str.= "<p>" . $item->pubDate . "</p>";
$str .= "<p>" . $item->description . "</p>";
$str .= '</div>';
}
$str .= '</div>';
echo $str;
fwrite($file, $str);
//-----------
fclose($file);
}
?>
- neznamy_uzivatel
- Člen | 115
Databáze je jen ukázka, jak si můžeš z di kontejneru vytáhnout
služby, které potřebuješ.
Jinak ten zbytek je takový kus legacy oldschool kódu, tam nevím co k tomu
říct jiného, než: začni základy OOP a pokračuj přečtením dokumentace
k nette – umí to docela naučit i obecné principy..
- dakur
- Člen | 493
@neznamy_uzivatel To je přece hloupost, kód nepíšeš v OOP proto, že je legacy a old-school, ale proto, že to má nějaký význam. Co bys na tom chtěl přepisovat do OOP?
@Tomas8698
Chcem sa spýtať ako kod treba upraviť aby bol funkčný.
Ten kód nefunguje? Pokud ne, co píše/dělá/nedělá? První krok je ho opravit, protože i když ho „přepíšeš do Nette“, tak ti pořád fungovat nebude.
Chcel by som sa opytat ako upraviť kod cronu aby fungoval v nette
CRON je program v operačním systému, který permanentně běží a má
jediný a jednoduchý úkol – jednou za definovanou dobu (to je ten těžko
čitelný zápis např. */4 2 * * *
) spustí nějaký skript, to je
celé. Skript může být psaný v PHP, ale taky v čemkoliv jiném, může to
být úplně cokoliv v systému.
Takže jestli v CRONu nastavíš spouštění
php /cesta/k/nejakemu/souboru/cron.php
nebo
php /cesta/k/nette/magic.php
, to je jedno – pokaždé ti to
spustí nějaký skript.
Na tom tvém skriptu samo o sobě nic špatného není – hodně mixuje PHP a HTML, což není úplně ono, ale v zásadě to nevadí. Pokud tedy nemáš potřebu ničeho jiného, nemá smysl to takzvaně přepisovat do Nette.
„Přepis do Nette“ spočívá typicky v úplně jiné potřebě –
moct z příkazové řádky spouštět různé funkcionality. Potom se hodí
mít jeden vstupní soubor např. bin/console.php
(místo dvaceti
souborů) a tomu předávat parametry, přičemž první z nich je takzvaný
command. A jeden takový command může být třeba
zpracujHodnoceniZVolneNohy
, který provede to, co máš nahoře.
Aby se člověk nemusel pořád dokola drbat s nastavováním té
infrastruktury a mohl rovnou psát commandy, vznikl balíček contributte/console.
Znovu ale říkám, že pokud nemáš potřebu mít více funkcionalit z příkazové řádky, není vůbec třeba to dělat. Klidně si to nech ve svém souboru a třeba jen ten mix PHP+HTML změň tak, že HTML převedeš do Latte a to zparsuješ. Tím si tam trochu uklidíš. 👍
- Tomas8698
- Člen | 109
To by malo byt funkčne ako kód funguje, ja som sa chcel spýtať ci sa to neupravuje keď sa to prerába do nette alebo že ci to môže byt tak ako mam. A ďakujem @dakur a upravím si to html do latte. Tak ono by to malo po kliknutí na odkaz: Zobraziť doporučení z portálu Navolnenoze.cz , spraviť to že sa zobrazia aktuálne komentáre čo sú na stránke navolnenoze.cz. Tu sú obrázky : https://github.com/…ette%20forum
stránka ktorá bola v php vyzerala predtým takto:
<?php
<h3>Na volné noze</h3>
<a id="doporuceni1BT" onclick="showDoporuceni(1)">Zobrazit doporučení z portálu Navolnenoze.cz</a>
<?php
// doporuceni insluduji, protoye je chci zobrazovať zde a nechci, aby lidi odchazeli na jiny web
require $_SERVER['DOCUMENT_ROOT']."/temp/navolnenoze-rss.html";
?>
?>
Len neviem si rady stým require ako to zapísať do latte, aby to bolo funkčne (aby tam neboli tie <?php tagy). Aby som to mohol použiť v mojom webe. Lebo keď dám require do zátvoriek: {require …} tak mi to hádže chybu
Editoval Tomas8698 (11. 3. 2021 21:38)
- dakur
- Člen | 493
@Tomas8698 {include}
nefunguje? viz dokumentace latte
Editoval dakur (12. 3. 2021 9:59)