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.
pozicování
05. říj 2015 16:07 - 05. říj 2015 16:12 #123758
Odpověď od Ernst
Joomla Expert
díky tomu již rozumím.
Ale mám tady věc, kterou hledám již dva dny a asi jsem se ztratil.
Využil jsem funkcí modulu a udělal nové menu, které do popup okna dá formulář, ten se vyplní (jedná se o user_id a text)
Až sem to plně ovládám, zadávám si pole, názvy polí atd.
Teď ale někde ty vyplněné hodnoty potřebuji použít a nemohu najít, kde je modul čte.
Stačilo by mi, abych si ty hodnoty poslal do nějakého php, kdy už bych si je zpracoval.
Nevím, zda následující kódy budou stačit
PHP:
tpl
quickpoznamka.tpl
javascript
jinak ještě tlačítko poznamka odešle
(zkopírováno z developer tool)
Ale mám tady věc, kterou hledám již dva dny a asi jsem se ztratil.
Využil jsem funkcí modulu a udělal nové menu, které do popup okna dá formulář, ten se vyplní (jedná se o user_id a text)
Až sem to plně ovládám, zadávám si pole, názvy polí atd.
Teď ale někde ty vyplněné hodnoty potřebuji použít a nemohu najít, kde je modul čte.
Stačilo by mi, abych si ty hodnoty poslal do nějakého php, kdy už bych si je zpracoval.
Nevím, zda následující kódy budou stačit
PHP:
Code:
public static function Quickpoznamka($userId, $text)
{
static $framework_loaded = false;
if ($userId === JFactory::getUser()->id) {
return false;
}
// Check if messages are enabled.
// if (!LoveFactoryApplication::getInstance()->getSettings('enable_messages')) {
// return false;
// }
// Check if framework has been loaded.
if (!$framework_loaded) {
$document = JFactory::getDocument();
$document->addScriptDeclaration('jQuery(document).ready(function ($) { $(".lovefactory-quick-poznamka").loveFactoryQuickpoznamka(); });');
// $test=('jQuery(document).ready(function ($) { $(".lovefactory-quick-poznamka").loveFactoryQuickpoznamka() });
// var_dump($test);
FactoryHtml::script('lovefactory');
$framework_loaded = true;
}
$html = array();
$html[] = '<a href="' . FactoryRoute::view('dialog&layout=quickpoznamka&format=raw&user_id='.$userId) . '" class="lovefactory-quick-poznamka" id="lovefactory-quickpoznamka-user-'.$userId.'"><i class="factory-icon icon-poznamka"></i>' . FactoryText::_('POZNAMKA_BUTTON_TITLE') .'</a>';
return implode("\n", $html);
}
tpl
Code:
<!-- poznamka button -->
<li>{jhtml _='LoveFactory.Quickpoznamka' userId=$profile->user_id}</li>
quickpoznamka.tpl
Code:
<div id="lovefactory-dialog" title="{jtext _='dialog_quickpoznamka_dialog_title'}">
<div class="lovefactory-dialog-quickpoznamka lovefactory-view">
<div class="lovefactory-dialog-content">
<form action="{jroute task='message.send'}" method="post">
<table>
<tr>
<th><label>{jtext _='dialog_quickpoznamka_label_to'}</label></th>
<td>{$username}</td>
</tr>
<tr>
<th><label for="text">{jtext _='dialog_quickpoznamka_label_message'}</label></th>
<td><textarea rows="5" cols="10" id="text" name="message[text]" >{$text}</textarea></td>
</tr>
</table>
<input type="hidden" name="message[user_id]" value="{$userId}">
</form>
</div>
<div class="lovefactory-dialog-buttons">
<a href="#" class="dialog-button dialog-button-submit ui-state-hover"><i class="factory-icon icon-poznamka"></i>{jtext _='dialog_quickpoznamka_button_submit'}</a>
<a href="#" class="dialog-button dialog-button-close"><i class="factory-icon icon-cross-button"></i>{jtext _='dialog_button_cancel'}</a>
</div>
</div>
</div>
javascript
Code:
loveFactoryQuickpoznamka: function () {
return this.each(function() {
$(this).click(function (event) {
event.preventDefault();
var elem = $(this);
var url = elem.attr('href');
$.LoveFactoryDialog(url, { elem: elem });
});
});
},
jinak ještě tlačítko poznamka odešle
Code:
<a href="/index.php/cs/mista-2/dialog?layout=quickpoznamka&format=raw&user_id=22" class="lovefactory-quick-poznamka" id="lovefactory-quickpoznamka-user-22"><i class="factory-icon icon-poznamka"></i>Privátní poznámka</a>
06. říj 2015 20:54 - 06. říj 2015 21:00 #123806
Odpověď od Ernst
Joomla Expert
už jsem postoupil hodně daleko.
Vytvořil jsem si nové menu, tpl soubor kde se vstupní pole zobrazí v frame, upravil javascript
V podstatě jsem dohlodával běh menu poslat zprávu a z něj duplikoval a upravovalo nové menu poslat poznámku.
poslední věc, kterou nemohu zatím dohledat.
Když dám tlačítko odeslat zavolá se
a tem se předpokládám ten vstup zpracovává.
U poslat poznámku tam mám
to je natefinováno v quickpoznhamka.tpl
Já ale nikde nemohu najít řetězec "send-message" a pak neví co to "/index.php/cs/lide-hledat-2/send-message" vlastně hledá. Nemohu ani najít název tabulky databáze.
Poradíte někdo, kde to může být?
menu poslat zprávu zapisuje do dat báze do tabulky lovefactory_messages, ale já z menu poslat poznámku potřebuji zapisovat do tabulky _lovefactory_poznamka, která může mít dokonce identiská pole
Vytvořil jsem si nové menu, tpl soubor kde se vstupní pole zobrazí v frame, upravil javascript
V podstatě jsem dohlodával běh menu poslat zprávu a z něj duplikoval a upravovalo nové menu poslat poznámku.
poslední věc, kterou nemohu zatím dohledat.
Když dám tlačítko odeslat zavolá se
Code:
form action="/index.php/cs/lide-hledat-2/send-message"
U poslat poznámku tam mám
Code:
form action="/index.php/cs/lide-hledat-2/send-poznamka"
to je natefinováno v quickpoznhamka.tpl
Code:
<form action="{jroute task='poznamka.send'}" method="post">
Já ale nikde nemohu najít řetězec "send-message" a pak neví co to "/index.php/cs/lide-hledat-2/send-message" vlastně hledá. Nemohu ani najít název tabulky databáze.
Poradíte někdo, kde to může být?
menu poslat zprávu zapisuje do dat báze do tabulky lovefactory_messages, ale já z menu poslat poznámku potřebuji zapisovat do tabulky _lovefactory_poznamka, která může mít dokonce identiská pole
06. říj 2015 22:40 #123810
Odpověď od Cony
Moderátor
Uff, tak v tom jsem se úplně ztratil. Formulář se Vám odesílá na jiné URL než chcete? Nebo jak?
Toto není standard Joomly:
LoveFactory používá template systém Smarty, nevím tedy přesně co to znamená, ale odhaduji, že se jedná o analogii volání PHP
Pak by to znamenalo že při vytváření URL se použije ID menu položky a komponenta, kde je zrovna modul zobrazen. Není to úplně šťastné, protože na stránkách s jinou komponentou by Vám to vyhodilo nesmysl.
Dál by to mělo znamenat, že akce bude zpracována controllerem poznamka a funkcí send. Vytvořil jste si takový Controller?
Toto není standard Joomly:
Code:
{jroute task='poznamka.send'}
Code:
JRoute::_('index.php?task=poznamka.send');
Dál by to mělo znamenat, že akce bude zpracována controllerem poznamka a funkcí send. Vytvořil jste si takový Controller?
06. říj 2015 22:44 - 06. říj 2015 22:45 #123811
Odpověď od Ernst
Joomla Expert
já jsem na to založil raději nové téma, tram už je to snad popsáno srozumitelněji. -
www.joomlaportal.cz/forum/71-joomla-3-0-...i/118504-form-action
pokud to chápu dobře, tak je to Controller, jdu si ho projít.
pokud to chápu dobře, tak je to Controller, jdu si ho projít.
06. říj 2015 23:02 #123813
Odpověď od Ernst
Joomla Expert
ano je to controller
Když dám form action="/index.php/cs/lide-hledat-2/send-message" vše proběhne OK a zapíše se to do databáze.
Já to ale potřebuji zapsat do databáze jinak, tak si volám form action="/index.php/cs/lide-hledat-2/send-poznamka" a to se neděje nic (nic se nikam nezapíše).
Chápu to tak, že akci pro send-poznamka musím dodat do controlleru? Ale jak?
Když dám form action="/index.php/cs/lide-hledat-2/send-message" vše proběhne OK a zapíše se to do databáze.
Já to ale potřebuji zapsat do databáze jinak, tak si volám form action="/index.php/cs/lide-hledat-2/send-poznamka" a to se neděje nic (nic se nikam nezapíše).
Chápu to tak, že akci pro send-poznamka musím dodat do controlleru? Ale jak?
06. říj 2015 23:46 - 06. říj 2015 23:49 #123815
Odpověď od Ernst
Joomla Expert
Tak už jsem to asi pochopil
v \components\com_lovefactory\controllers
jsem message.php zkopíroval do poznamka.php, upravil zde název třídy na class FrontendControllerPoznamka extends FrontendController a teď to běží tudy. obsah zatím nechápu a var_dump nemohu použít.
Musím pochopit jak to funguje nebo místo toho udělat vlastní zápis do databáze.
poznámka.php:
Pochopil jsem to správně?
v \components\com_lovefactory\controllers
jsem message.php zkopíroval do poznamka.php, upravil zde název třídy na class FrontendControllerPoznamka extends FrontendController a teď to běží tudy. obsah zatím nechápu a var_dump nemohu použít.
Musím pochopit jak to funguje nebo místo toho udělat vlastní zápis do databáze.
poznámka.php:
Code:
<?php
/**
-------------------------------------------------------------------------
lovefactory - Love Factory 4.3.5
-------------------------------------------------------------------------
* @author thePHPfactory
* @copyright Copyright (C) 2011 SKEPSIS Consult SRL. All Rights Reserved.
* @license - http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
* Websites: http://www.thePHPfactory.com
* Technical Support: Forum - http://www.thePHPfactory.com/forum/
-------------------------------------------------------------------------
*/
defined('_JEXEC') or die;
class FrontendControllerPoznamka extends FrontendController
{
public function send()
{
$settings = LoveFactoryApplication::getInstance()->getSettings();
$model = $this->getModel('Message');
$data = JFactory::getApplication()->input->get('message', array(), 'array');
$response = array();
var_dump($data);
if ($model->send($data)) {
$response['status'] = 1;
$response['message'] = FactoryText::plural('message_task_send_success', $settings->approval_messages);
} else {
$response['status'] = 0;
$response['message'] = FactoryText::_('message_task_send_error');
$response['error'] = $model->getError();
}
$this->checkMembershipRestrictionRedirection($model, $response);
// Check if it's Ajax request.
if ($this->isAjaxRequest()) {
$this->renderJson($response);
return true;
}
if ($response['status']) {
if (!isset($response['redirect'])) {
$response['redirect'] = FactoryRoute::view('outbox');
}
} else {
if (!isset($response['redirect'])) {
$response['redirect'] = FactoryRoute::view('compose');
}
JFactory::getApplication()->enqueueMessage($response['error'], 'error');
}
$this->setRedirect($response['redirect'], $response['message']);
return true;
}
public function delete()
{
$id = JFactory::getApplication()->input->getInt('id', 0);
$model = $this->getModel('Message');
if ($model->delete($id)) {
$msg = FactoryText::_('message_task_delete_success');
$url = FactoryRoute::view($model->getState('redirect'));
} else {
$msg = FactoryText::_('message_task_delete_error');
$url = FactoryRoute::view('message&id=' . $id);
JFactory::getApplication()->enqueueMessage($model->getError(), 'error');
}
$this->setRedirect($url, $msg);
}
public function searchUser()
{
$model = $this->getModel('Message');
$term = JFactory::getApplication()->input->getString('q', '');
$results = $model->searchUser($term);
$this->renderJson($results);
return true;
}
}
Pochopil jsem to správně?