Stránka s vlastním PHP

Jakub Filip
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

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
26. úno 2015 12:09 #120446

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Pavel
26. úno 2015 12:23 - 26. úno 2015 12:25 #120448
Nebo použít pro psaní článků JCE, kde máte možnost povolit vkládání PHP scriptů. Další je možnost použít plugin DirectPHP .

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Houbák
26. úno 2015 12:41 - 26. úno 2015 12:43 #120450
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...

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Jakub Filip
26. úno 2015 15:16 #120455
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.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Houbák
26. úno 2015 15:50 #120457
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.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Jakub Filip
28. úno 2015 11:17 #120484
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

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
28. úno 2015 11:48 #120487
No pokud to na lokále funguje, problém bude spíš na serveru. Opravdu vám (i nyní) instalace jiných komponent funguje?

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Jakub Filip
28. úno 2015 11:54 #120488
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

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Jakub Filip
28. úno 2015 11:55 #120489
Ano, nyní jsem zkusil instalaci komponenty DircetPHP a v pořádku

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Jakub Filip
28. úno 2015 12:01 #120491
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>

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Jakub Filip
28. úno 2015 12:14 #120492
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?

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
28. úno 2015 22:57 #120504
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.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Jakub Filip
02. bře 2015 20:50 #120558
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?

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
02. bře 2015 21:34 #120562
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
<?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.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.