pozicování

Ernst
03. říj 2015 16:37 #123724
dá se v html zadat na jaké pozici stránky se má zobrazit. Možno i v css, ale tam asi ne.
myslím pozice šablony, tedy např left right position1 atd.

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

Odpověď od Cony
03. říj 2015 22:56 #123727
Cože? :woohoo: Popište nějak srozumitelněji, o co Vám jde. A nepleťte si dohromady html a šablonu. V html nic jako "pozice šablony" neexistuje. Šablona generuje html, na pozicích šablony se zobrazují moduly, které jsou na ty pozice přiřazené (tj. moduly generují html vložené na příslušné místo v šabloně).

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

Odpověď od Ernst
04. říj 2015 18:33 - 04. říj 2015 18:36 #123734
Já vím, blbě napsanej dotaz :blush:
Když v php volám nějaké url, tak jsem měl vsugerováno, že se v parametru dá zadat na jaké požici šablony se má to url zobrazit.
Ale teď to nemohu najít.
Vím že se jako parametr dá poslat šablona, která se má použít, ale nevím, zda i pozice

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

Odpověď od Cony
04. říj 2015 21:38 #123735
Jak "kde se má to url zobrazit"? URL je odkaz na stránku, pokud ji nahrajete tak, že URL zadáte do prohlížeče, nahrává se Vám celá stránka, ne jen nějaká část. Pokud URl nahráváte pomocí AJAX, řešíte si to v Javascriptu, kde se má zobrazit. Pokud nahráváte v iframe, zobrazí se Vám v iframe...

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

Odpověď od Ernst
05. říj 2015 14:39 #123748
Díky
Když použiji ajax, jak v javascriptu určím tu pozici?

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

Odpověď od Cony
05. říj 2015 15:22 #123751
B) No tam kde zpracováváte odpověď ze serveru. Server Vám vrátí nějaké HTML (například), a vy jej umístíte do nějakého prvku (například pomocí funkce .html()).

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

Odpověď od Ernst
05. říj 2015 16:07 - 05. říj 2015 16:12 #123758
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:
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
  <!-- poznamka button -->
        <li>{jhtml _='LoveFactory.Quickpoznamka' userId=$profile->user_id}</li>

quickpoznamka.tpl
<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
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
<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)

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

Odpověď od Ernst
06. říj 2015 20:54 - 06. říj 2015 21:00 #123806
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
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
form action="/index.php/cs/lide-hledat-2/send-poznamka"

to je natefinováno v quickpoznhamka.tpl
<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

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

Odpověď od Cony
06. říj 2015 22:40 #123810
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:
{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
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?

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

Odpověď od Ernst
06. říj 2015 22:44 - 06. říj 2015 22:45 #123811
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.

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

Odpověď od Ernst
06. říj 2015 23:02 #123813
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?

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

Odpověď od Ernst
06. říj 2015 23:46 - 06. říj 2015 23:49 #123815
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:
<?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ě?

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

Odpověď od Ernst
07. říj 2015 00:46 #123816
Ještě mi někdo prosím poraďte, jak jednoduše vypíšu proměnné z poznamka.php

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

Odpověď od Cony
07. říj 2015 09:27 #123822
Zkuste se už opravdu trochu zorientovat v terminologii a princicpech. Co to znamená "Vypíšu proměnné"? Kam? Proč?

Základ o tom co je to Controller, Model nebo View si můžete pročíst zde .

Vy jste se ro\zhodl vytvořit si vlastní Controller, měl by jste tedy správně pro něj mít i vlastní model a view. Asi jednodušší cesta by pro Vás mohla být jen rozšířit stávající controller messages o novou funkci poznamka a pak míso poznamka.send volat adresu mesages.poznamka.

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

Odpověď od Ernst
07. říj 2015 12:37 - 07. říj 2015 12:39 #123827
vypsat proměnné potřebuji jen kvůli ladění.
var_dump echo, alert mi nic nevypíše (tedy to hned zmizí, protože jak se zavře to formulářové okno to asi hned zmizí.
zkoušel jsem i print() ale to také nějak nejde.
Jde to uložit do souboru?
Díky za článek, čtu si ho.

Té poslední větě rozumím tak, že messages je název toho php a send nebo poznámka je funkce v té třídě?
Zkusit ti mohu, ale v čem je to lepší?
Já v poznamka.php ve funkci send vyhodím ty další věci, který nemám ještě zmapovaný a udělám si tam vlastní zápis do databáze. Správně to asi není, ale fungovat by to mělo?
Ale abych se zorientoval, potřebuji si vypsat proměnný ve funkci send

Ta funkce send zapíše nebo volá zápis do databáze a to nevím přesně jak a luštil bych to ještě pár dní.
A já to potřebují zapsat do jiné tabulky databáze, proto bych to nejraději udělal rovnou v tom poznamka - send

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