Stránka s vlastním PHP
26. úno 2015 11:50 #120444
Dobrý den,
chtěl bych se zeptat, jakým způsobem se dá v Joomle vyřešit nová stránka s vlastním PHP kódem. Jde mi o to, že bych chtěl vytvořit stránku, která bude ze šablony, budou na něm všechny moduly a pozice, ale v hlavním sloupci chci mít vlastní PHP kód.
Děkuji za reakce
chtěl bych se zeptat, jakým způsobem se dá v Joomle vyřešit nová stránka s vlastním PHP kódem. Jde mi o to, že bych chtěl vytvořit stránku, která bude ze šablony, budou na něm všechny moduly a pozice, ale v hlavním sloupci chci mít vlastní PHP kód.
Děkuji za reakce
26. úno 2015 12:41 - 26. úno 2015 12:43 #120450
Odpověď od Houbák
Zkušený uživatel
Komponenta je samozřejmě nejlepší řešení. Pokud si na to však netroufnete, dalo by se to řešit i pomocí iframe (třeba položku menu). Také záleží na tom, jestli ten php skript má zpracovávat nějaké údaje z Joomly...
26. úno 2015 15:16 #120455
Odpověď od Jakub Filip
Uživatel
Děkuji všem za příspěvky, určitě zkusím vytvořit vlastní komponentu. Z Joomly kromě šablony a modulů tahat nic nebudu. Potřebuji jen pomocí jednoduchých SQL dotazů získat data z externí databáze umístěné na jiném serveru.
26. úno 2015 15:50 #120457
Odpověď od Houbák
Zkušený uživatel
Tahat něco z externí databáze na jiném serveru je někdy problém, protože je velice často zablokovaný externí přístup do DB. Možná to není váš případ, pouze na to upozorňuji.
28. úno 2015 11:17 #120484
Odpověď od Jakub Filip
Uživatel
Zdravím,
Dle dokumentace Joomly jsem vytvořil jednoduchou komponentu, ale má problém s instalací. Na lokálu (WampServer, Apache 2.2.22. PHP 5.3.13) mi instalace proběhne úspěšně ale na stránkách mi to hodí chybu:
Warning
JInstaller: :Install: Cannot find XML setup file
JInstaller: :Install: Cannot find XML setup file
Copy failed
Joomla je verze 3.3.6 a s instalací jiných komponent jsem problém neměl. Zkoušel jsem jak instalovat balík, tak i ze složky tmp.
zde obsah xml souboru:
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="3.3.0" method="upgrade">
<name>Krouzky</name>
<!-- The following elements are optional and free of formatting constraints -->
<creationDate>February 2015</creationDate>
<author>Autor</author>
<authorEmail>Email</authorEmail>
<authorUrl>h</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<!-- The version string is recorded in the components table -->
<version>0.0.1</version>
<!-- The description is optional and defaults to the name -->
<description>Vypis krouzku z Domecku</description>
<update> <!-- Runs on update; New since J2.5 -->
<schemas>
<schemapath type="mysql">sql/updates/mysql</schemapath>
</schemas>
</update>
<!-- Site Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /site/ in the package -->
<files folder="site">
<filename>index.html</filename>
<filename>krouzky.php</filename>
</files>
<administration>
<!-- Administration Menu Section -->
<menu link='index.php?option=com_krouzky'>Kroužky</menu>
<!-- Administration Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /admin/ in the package -->
<files folder="admin">
<!-- Admin Main File Copy Section -->
<filename>index.html</filename>
<filename>krouzky.php</filename>
<!-- SQL files section -->
<folder>sql</folder>
</files>
</administration>
</extension>
Projíždím fóra, kde se dá. Ale zatím se mi to nepodařilo vyřešit. Máte nějaký nápad. Díky
Dle dokumentace Joomly jsem vytvořil jednoduchou komponentu, ale má problém s instalací. Na lokálu (WampServer, Apache 2.2.22. PHP 5.3.13) mi instalace proběhne úspěšně ale na stránkách mi to hodí chybu:
Warning
JInstaller: :Install: Cannot find XML setup file
JInstaller: :Install: Cannot find XML setup file
Copy failed
Joomla je verze 3.3.6 a s instalací jiných komponent jsem problém neměl. Zkoušel jsem jak instalovat balík, tak i ze složky tmp.
zde obsah xml souboru:
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="3.3.0" method="upgrade">
<name>Krouzky</name>
<!-- The following elements are optional and free of formatting constraints -->
<creationDate>February 2015</creationDate>
<author>Autor</author>
<authorEmail>Email</authorEmail>
<authorUrl>h</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<!-- The version string is recorded in the components table -->
<version>0.0.1</version>
<!-- The description is optional and defaults to the name -->
<description>Vypis krouzku z Domecku</description>
<update> <!-- Runs on update; New since J2.5 -->
<schemas>
<schemapath type="mysql">sql/updates/mysql</schemapath>
</schemas>
</update>
<!-- Site Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /site/ in the package -->
<files folder="site">
<filename>index.html</filename>
<filename>krouzky.php</filename>
</files>
<administration>
<!-- Administration Menu Section -->
<menu link='index.php?option=com_krouzky'>Kroužky</menu>
<!-- Administration Main File Copy Section -->
<!-- Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /admin/ in the package -->
<files folder="admin">
<!-- Admin Main File Copy Section -->
<filename>index.html</filename>
<filename>krouzky.php</filename>
<!-- SQL files section -->
<folder>sql</folder>
</files>
</administration>
</extension>
Projíždím fóra, kde se dá. Ale zatím se mi to nepodařilo vyřešit. Máte nějaký nápad. Díky
28. úno 2015 11:48 #120487
Odpověď od Cony

Moderátor
No pokud to na lokále funguje, problém bude spíš na serveru. Opravdu vám (i nyní) instalace jiných komponent funguje?
28. úno 2015 11:54 #120488
Odpověď od Jakub Filip
Uživatel
Pro upřesnění uvádím strukturu vytvořené komponenty.
v balíčku ZIP mám:
admin
- sql
- - updates
- - - mysql
- - - - 0.0.1.sql
- - - - index.html
- - - index.html
- - index.html
- krouzky.php
- index.html
site
- krouzky.php
- index.html
krouzky.xml
Obsah souboru krouzky.xml viz předchozí příspěvek
Obsah všech souborů index.html je stejný a to <html><body bgcolor="#FFFFFF"></body></html>
Obsah souboru 0.0.1.sql je prázdný
Obsah souboru admin / krouzky.php je prostý text
Obsah souboru site / krouzky.php je můj PHP kód
Prosím poraďte
v balíčku ZIP mám:
admin
- sql
- - updates
- - - mysql
- - - - 0.0.1.sql
- - - - index.html
- - - index.html
- - index.html
- krouzky.php
- index.html
site
- krouzky.php
- index.html
krouzky.xml
Obsah souboru krouzky.xml viz předchozí příspěvek
Obsah všech souborů index.html je stejný a to <html><body bgcolor="#FFFFFF"></body></html>
Obsah souboru 0.0.1.sql je prázdný
Obsah souboru admin / krouzky.php je prostý text
Obsah souboru site / krouzky.php je můj PHP kód
Prosím poraďte
28. úno 2015 11:55 #120489
Odpověď od Jakub Filip
Uživatel
Ano, nyní jsem zkusil instalaci komponenty DircetPHP a v pořádku
28. úno 2015 12:01 #120491
Odpověď od Jakub Filip
Uživatel
Na lokále sice proběhne instalace v pořádku, ale stránka s mým PHP kódem vyhazuje chyby. Pokud ovšem můj PHP kód hodím na stránky do zvláštní složky, tak to běhá bez problémů.
Můj PHP kód. Tečkama jsem skryl "citlivá" data:
<meta charset="utf8">
<link rel="stylesheet" href="/templates/protostar/css/krouzky.css" type="text/css">
<div class="krouzky">
<?php
$domain = ....;
$key = ".......";
if($_GET["id"] == "") {
$kategorie = json_decode(file_get_contents("https:/........./admin/json/1.0/api.php?domain=".$domain."&key=".$key."&action=hobby&task=get_categories"));
if($_GET["den"] == "") {
$den = 0;
} else {
$den = $_GET["den"];
}
if($_GET["kat"] == "") {
$kat = "";
} else {
$kat = $_GET["kat"];
}
echo "<div class='kr_kat'><h2>Kategorie</h2>";
echo '<a href="krouzky.php?kat=&den='.$den.'">Všechny kategorie</a><br>';
foreach($kategorie->data as $k => $v) {
echo '<a href="krouzky.php?kat='.$k.'&den='.$den.'">'.$v.'</a><br>';
}
echo "</div>";
echo "<div class='kr_den'><h2>Den konání</h2>";
echo '<a href="krouzky.php?kat='.$kat.'&den=0">Všechny dny</a><br>';
echo '<a href="krouzky.php?kat='.$kat.'&den=1">Pondělí</a><br>';
echo '<a href="krouzky.php?kat='.$kat.'&den=2">Úterý</a><br>';
echo '<a href="krouzky.php?kat='.$kat.'&den=3">Středa</a><br>';
echo '<a href="krouzky.php?kat='.$kat.'&den=4">Čtvrtek</a><br>';
echo '<a href="krouzky.php?kat='.$kat.'&den=5">Pátek</a><br>';
echo '<a href="krouzky.php?kat='.$kat.'&den=6">Sobota</a><br>';
echo '<a href="krouzky.php?kat='.$kat.'&den=7">Neděle</a><br>';
echo "</div>";
$list = json_decode(file_get_contents("https://........./admin/json/1.0/api.php?domain=".$domain."&key=".$key."&action=hobby&task=get_list&day=".$den."&category=".$kat.""));
if($list->error->code == 0) {
echo '<table class="kr_tab">';
echo '<tr><th width="80">Kód</th><th width="300">Název</th><th width="50">Věk</th><th width="80">Cena</th><th></th></tr>';
foreach($list->data as $v) {
echo '<tr><td>'.$v->kod.'</td>';
echo '<td class="nazev">'.$v->nazev.'</td>';
echo '<td>'.$v->vek_od.'-'.$v->vek_do.'</td>';
echo '<td>'.$v->cena_rok.' Kč</td>';
echo '<td><a href="krouzky.php?id='.$v->id.'">info</a></td></tr>';
}
echo '</table>';
}
} else {
$data = json_decode(file_get_contents("https://............./admin/json/1.0/api.php?domain=".$domain."&key=".$key."&action=hobby&task=get_id&id=".$_GET["id"]));
$detail = $data->data;
echo "<h2>Detail kroužku</h2>";
echo 'Název: '.$detail->nazev.'<br>';
echo 'Kód: '.$detail->kod.'<br>';
echo 'Místo: '.$detail->misto.'<br>';
echo 'Lektor: '.$detail->keltor.'<br>';
echo 'Kapacita 1. pol: '.$detail->kapacita_1pol.'<br>';
echo 'Kapacita 2. pol: '.$detail->kapacita_2pol.'<br>';
echo 'Věk od: '.$detail->vek_od.'<br>';
echo 'Věk do: '.$detail->vek_do.'<br>';
echo 'Cena vstup: '.$detail->cena_vstup.'<br>';
echo 'Cena 1. pol: '.$detail->cena_1pol.'<br>';
echo 'Cena 2. pol: '.$detail->cena_2pol.'<br>';
echo 'Cena rok: '.$detail->cena_rok.'<br>';
echo 'Zahájení: '.$detail->datum_zahajeni.'<br>';
echo 'Ukončení: '.$detail->datum_ukonceni.'<br>';
echo "<h3>Obrázky</h3>";
foreach($detail->obrazky as $obr) {
echo '<a href="'.$obr->obrazek.'" title="'.$obr->popis.'"><img src="'.$obr->nahled.'"></a> <br>';
echo '<a href="'.$obr->stazeni.'" title="'.$obr->popis.'">stáhnout</a> <br><br>';
}
echo "<h3>Dokumenty</h3>";
foreach($detail->dokumenty as $doc) {
echo '<a href="'.$doc->stazeni.'" title="'.$doc->popis.'">'.$doc->nazev.'</a><br>';
}
echo '<br><a href="krouzky.php">zpět</a>';
}
?>
</div>
Můj PHP kód. Tečkama jsem skryl "citlivá" data:
<meta charset="utf8">
<link rel="stylesheet" href="/templates/protostar/css/krouzky.css" type="text/css">
<div class="krouzky">
<?php
$domain = ....;
$key = ".......";
if($_GET["id"] == "") {
$kategorie = json_decode(file_get_contents("https:/........./admin/json/1.0/api.php?domain=".$domain."&key=".$key."&action=hobby&task=get_categories"));
if($_GET["den"] == "") {
$den = 0;
} else {
$den = $_GET["den"];
}
if($_GET["kat"] == "") {
$kat = "";
} else {
$kat = $_GET["kat"];
}
echo "<div class='kr_kat'><h2>Kategorie</h2>";
echo '<a href="krouzky.php?kat=&den='.$den.'">Všechny kategorie</a><br>';
foreach($kategorie->data as $k => $v) {
echo '<a href="krouzky.php?kat='.$k.'&den='.$den.'">'.$v.'</a><br>';
}
echo "</div>";
echo "<div class='kr_den'><h2>Den konání</h2>";
echo '<a href="krouzky.php?kat='.$kat.'&den=0">Všechny dny</a><br>';
echo '<a href="krouzky.php?kat='.$kat.'&den=1">Pondělí</a><br>';
echo '<a href="krouzky.php?kat='.$kat.'&den=2">Úterý</a><br>';
echo '<a href="krouzky.php?kat='.$kat.'&den=3">Středa</a><br>';
echo '<a href="krouzky.php?kat='.$kat.'&den=4">Čtvrtek</a><br>';
echo '<a href="krouzky.php?kat='.$kat.'&den=5">Pátek</a><br>';
echo '<a href="krouzky.php?kat='.$kat.'&den=6">Sobota</a><br>';
echo '<a href="krouzky.php?kat='.$kat.'&den=7">Neděle</a><br>';
echo "</div>";
$list = json_decode(file_get_contents("https://........./admin/json/1.0/api.php?domain=".$domain."&key=".$key."&action=hobby&task=get_list&day=".$den."&category=".$kat.""));
if($list->error->code == 0) {
echo '<table class="kr_tab">';
echo '<tr><th width="80">Kód</th><th width="300">Název</th><th width="50">Věk</th><th width="80">Cena</th><th></th></tr>';
foreach($list->data as $v) {
echo '<tr><td>'.$v->kod.'</td>';
echo '<td class="nazev">'.$v->nazev.'</td>';
echo '<td>'.$v->vek_od.'-'.$v->vek_do.'</td>';
echo '<td>'.$v->cena_rok.' Kč</td>';
echo '<td><a href="krouzky.php?id='.$v->id.'">info</a></td></tr>';
}
echo '</table>';
}
} else {
$data = json_decode(file_get_contents("https://............./admin/json/1.0/api.php?domain=".$domain."&key=".$key."&action=hobby&task=get_id&id=".$_GET["id"]));
$detail = $data->data;
echo "<h2>Detail kroužku</h2>";
echo 'Název: '.$detail->nazev.'<br>';
echo 'Kód: '.$detail->kod.'<br>';
echo 'Místo: '.$detail->misto.'<br>';
echo 'Lektor: '.$detail->keltor.'<br>';
echo 'Kapacita 1. pol: '.$detail->kapacita_1pol.'<br>';
echo 'Kapacita 2. pol: '.$detail->kapacita_2pol.'<br>';
echo 'Věk od: '.$detail->vek_od.'<br>';
echo 'Věk do: '.$detail->vek_do.'<br>';
echo 'Cena vstup: '.$detail->cena_vstup.'<br>';
echo 'Cena 1. pol: '.$detail->cena_1pol.'<br>';
echo 'Cena 2. pol: '.$detail->cena_2pol.'<br>';
echo 'Cena rok: '.$detail->cena_rok.'<br>';
echo 'Zahájení: '.$detail->datum_zahajeni.'<br>';
echo 'Ukončení: '.$detail->datum_ukonceni.'<br>';
echo "<h3>Obrázky</h3>";
foreach($detail->obrazky as $obr) {
echo '<a href="'.$obr->obrazek.'" title="'.$obr->popis.'"><img src="'.$obr->nahled.'"></a> <br>';
echo '<a href="'.$obr->stazeni.'" title="'.$obr->popis.'">stáhnout</a> <br><br>';
}
echo "<h3>Dokumenty</h3>";
foreach($detail->dokumenty as $doc) {
echo '<a href="'.$doc->stazeni.'" title="'.$doc->popis.'">'.$doc->nazev.'</a><br>';
}
echo '<br><a href="krouzky.php">zpět</a>';
}
?>
</div>
28. úno 2015 12:14 #120492
Odpověď od Jakub Filip
Uživatel
Ještě jedno doplnění. V komponentě nemám naprogramován Controller ani View. Musí být tato část naprogramována, když z Joomly budu chtít jen zobrazit šablonu a moduly?
28. úno 2015 22:57 #120504
Odpověď od Cony

Moderátor
MVC nemusíte používat, když se to ale naučíte, hodně toho o Joomle pochopíte a do budoucna si usnadníte práci.
Na první pohled vše vypadá v pořádku. Chybová hláška by mohla ukazovat na
- problémy v nastavení Joomly (ale jiná komponenta Vám funguje)
- problémy v XML manifestu komponenty (ale jiná instance Joomly Vám XML zkousne)
Zkusil bych se tedy zaměřit na ten manifest, pročistěte ho od nepotřebného balastu (poznámky, sekce update), zkontrolujte zda se opravdu jedná o platné XML, a zda je opravdu uloženo jako UTF-8.
Na první pohled vše vypadá v pořádku. Chybová hláška by mohla ukazovat na
- problémy v nastavení Joomly (ale jiná komponenta Vám funguje)
- problémy v XML manifestu komponenty (ale jiná instance Joomly Vám XML zkousne)
Zkusil bych se tedy zaměřit na ten manifest, pročistěte ho od nepotřebného balastu (poznámky, sekce update), zkontrolujte zda se opravdu jedná o platné XML, a zda je opravdu uloženo jako UTF-8.
02. bře 2015 20:50 #120558
Odpověď od Jakub Filip
Uživatel
Děkuji za podnět.
Už se mi to podařilo vyřešit asi tři dny zpátky. Stačilo vymazat složky components / com_krouzky a administrator / components / com_krouzky. Pak instalace komponenty proběhla v pořádku.
Teď ale řeším trochu jiný problém.
Odkaz z menu na tuto komponentu jsem zatím vyřešil přes externí url. Na stránce se mi však nezobrazuje modul, který mám k této položce menu přiřazen. Je to tím, že nemám naprogramován JController a View?
Už se mi to podařilo vyřešit asi tři dny zpátky. Stačilo vymazat složky components / com_krouzky a administrator / components / com_krouzky. Pak instalace komponenty proběhla v pořádku.
Teď ale řeším trochu jiný problém.
Odkaz z menu na tuto komponentu jsem zatím vyřešil přes externí url. Na stránce se mi však nezobrazuje modul, který mám k této položce menu přiřazen. Je to tím, že nemám naprogramován JController a View?
02. bře 2015 21:34 #120562
Odpověď od Cony

Moderátor
Ano i ne. Je to jedna z věcí, která pokud použijete MVC bude jednodušší. Odkaz do menu lze ale definovat i XML souborem metadata.xml přímo v kořenovém adresáři komponenty (v site části).
Pro studium bych doporučil mrknout přímo do zdrojáků Joomly do souboru
Ten soubor metadata.xml by měl vypadat v nejjednodušší verzi nějak takto
Za COM_KROUZKY_MENU_LABEL a COM_KROUZKY_MENU_DESC si buď dosaďte přímo název a popis, pod kterým Vám bude menu manager tuto položku nabízet, nebo pokud budete chtít být důsledný vytvořte si jazykový soubor cs-CZ.com_krouzky.sys.ini pro admin část a v něm tyto dvě konstanty nadefinujte.
Pro studium bych doporučil mrknout přímo do zdrojáků Joomly do souboru
Ten soubor metadata.xml by měl vypadat v nejjednodušší verzi nějak takto
Code:
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<menu name="COM_KROUZKY_MENU_LABEL" msg="COM_KROUZKY_MENU_DESC" />
</metadata>
Za COM_KROUZKY_MENU_LABEL a COM_KROUZKY_MENU_DESC si buď dosaďte přímo název a popis, pod kterým Vám bude menu manager tuto položku nabízet, nebo pokud budete chtít být důsledný vytvořte si jazykový soubor cs-CZ.com_krouzky.sys.ini pro admin část a v něm tyto dvě konstanty nadefinujte.