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.

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:
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&amp;format=raw&amp;user_id=22" class="lovefactory-quick-poznamka" id="lovefactory-quickpoznamka-user-22"><i class="factory-icon icon-poznamka"></i>Privátní poznámka</a>
(zkopírováno z developer tool)

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
Code:
form action="/index.php/cs/lide-hledat-2/send-message"
a tem se předpokládám ten vstup zpracovává.
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:
Code:
{jroute task='poznamka.send'}
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
Code:
JRoute::_('index.php?task=poznamka.send');
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?

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.

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?

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:
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ě?

Powered by Fórum