Přihlásit se

Joomla 5.1.0 a Joomla 4.4.4 (17 dub 2024)

Dnes byla uvolněna nová verze Joomla 5.1.0, společně s Joomla 4.4.4. Tato verze přináší spoustu nových funkcí, vylepšení v oblasti bezpečnosti a kódu a díky těmto vylepšením i vyšší rychlost.

předání dat z javascript do PHP

17. zář 2015 11:28 #123445
Odpověď od Ernst
Joomla Expert
Přiznávám, že tady stále tápu.
Pokud to vezmu z návodu od conyho a dám
$document = JFactory::getDocument();
$document->addScriptDeclaration('
window.event("domready", function() {
alert("An inline JavaScript Declaration");
});
');
tak do objektu $document doplním pole ($document->_script) s tímto scriptem.
Ale stále mi nedochází, jak to poslat na klienta.
Pokud to chápu dobře, tak javasript musí na konci zavolat index.php?long=xxxx &lat=yyyy.
ale ještě jsem se nedostal k tomu, jak ty hodnoty metodou post nebo get přečtu

17. zář 2015 12:39 #123446
Odpověď od Cony
Moderátor
"Poslání" na klienta za Vás při tomto postupu řeší Joomla.

Používáte window.domready - nezapomeňte tedy také nahrát MooTools. V dnešní době bych ale doporučil spíš používat jQuery, MooTools budou z Joomly odstraněny.

Skript Vám na server musí poslat asynchroní požadavek, a Vy jej musiíte zpracovat. Prvně se musíte rozhodnout kde jej budete zpracovávat (v komponentě, pluginu, modulu), a podle toho bude vypadat ono URL požadavku.

Hodnoty vstupů viz dokumentace .

17. zář 2015 12:56 - 17. zář 2015 13:00 #123447
Odpověď od Ernst
Joomla Expert
Tak a teď jsem se v tom ztratil.
Prvně potřebuji poslat ten javascript na klienta.
Podle dokumentace by stačilo echo , ale to mi hlásilo chybu syntaxe (viz níže).
Dále jsem chtěl postupovat, jak psal H13.
A teď z toho mám v hlavě už guláš

nechci se učit javascript, já to potřebuji jen pro tento jeden případ a zde je už javascript vytvořen

volat to chci z modulu z jedné funkce ve třídě a na tom samém místě to přečíst.

17. zář 2015 13:31 #123448
Odpověď od Cony
Moderátor

ernst napsal: volat to chci z modulu z jedné funkce ve třídě a na tom samém místě to přečíst.

Ale takhle přece JavaScript nefunguje. To čemu říkáte "poslání na klienta" je vypsání kódu Javaskriptu do HTML. To můžete udělat pomocí echo, ale pak si musíte hlídat v kterém místě echo voláte, aby se skript vypsal tam kam má, nebo pomocí výše uvedeného způsobu. To je první krok.

Druhý krok je to, že ten Javaskript musí něco udělat, ve Vašem případě zavolá jakousi adresu s nějakými parametry. Tečka.

Třetí krok je to, že na uvedené adrese musí něco požadavek zpracovat a něco s ním udělat. Jste v Joomle, měl by jste použít prostředky Joomly, pro tento konkrétní případ můžete použít komponentu com_ajax a zpracovávat dotaz v modulu. Zapomeňte na "zpracování v tom samém místě", jsou to dva naprosto oddělené kroky, dva oddělené požadavky na server, nemůžete čekat že "pošlete javaskript na klienta" a v následuícím příkazu PHP už zpracováváte odpověď.

Nemusíte se učit javaskript, pokuste se ale alespoň naučit jak věci principielně fungují.
Poděkovali: Ernst

17. zář 2015 15:21 #123449
Odpověď od Ernst
Joomla Expert
Díky
ajax rozhraní mám nainstalované, teď se jdu prokousávat dokumentací.

Kdy ten javascript volám, je asi celkem jedno, protože potřebuji jeho hodnoty vrátit do PHP, sám nic nevypíše (tedy nepotřebuji aby něco vypsal.)

Já bohužel něco pochopím, až když to vidím napsané jako příklad (viz. požití Usort pro třídění vícerozměrných polí jsem plně pochopil, až jste mi to napsal jako příklad). Už dva dny hledám na netu nějaký kompletní příklad na předání hodnot z JS do PHP a nemohu nic najít. Všude je to napsáno obecně a ne konkrétně.

Chápu, že php se již ukončí, když se provede ten javascript a že to zpětné volání stránky s parametry musím znovu přečíst.
Ale chtěl bych to někde vidět napsané na libovolném funkčním příkladu.

20. zář 2015 22:52 #123489
Odpověď od Ernst
Joomla Expert
tak jsem se soustředil jen na ajax a přečetl si spoustu článků a částečně jsem pochopil ajax.
Nadefinuji si jedno nebo více políček a tlačítko
<div id="results"></div>
<input type="text" name="name" id="name" value="">
<input type="button" class="button" id="savename" value="jmeno">

zavolám
$document = &JFactory::getDocument();
$document->addScript('/components/com_lovefactory/js/lokace.js')

lokace.js je:
jQuery(document).ready(function(){
jQuery("#savename").click(function(){
var name = jQuery('#name').val();
jQuery.post("/components/com_lovefactory/lokace.php?name="+name , {
}, function(response){ jQuery('#results').html(jQuery(response).fadeIn('slow'));}); });});

a souboru lokace.php si to přečtu:
<?php
define( '_JEXEC', 1 );
if (stristr( $_SERVER, 'win32' )) {
define( 'JPATH_BASE', realpath(dirname(__FILE__).'\..\..' ));
} else define( 'JPATH_BASE', realpath(dirname(__FILE__).'/../..' ));
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE.DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE.DS.'includes'.DS.'framework.php' );
$app =& JFactory::getApplication('site');
$app->initialise();
jimport( 'joomla.user.user' );
jimport( 'joomla.user.helper' );
$name = $_REQUEST; ?>

Ale zatím nevím, jak to lokace.js napsat, aby nevyplňoval žádný políčka, ale poslal latitude a longitude,
To znamená tento JS:
function showPosition(position) {
alert("[" + position.coords.latitude + " ; " + position.coords.longitude + "]");
}
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
alert("ERR: Prohlizec nepodporuje Geolocation API");
}
ale aby mi místo alertu vrátil tyto hodnoty na server

Powered by Fórum