CakePHP 3.6.14: представление представления (.ctp) в модале начальной загрузки

Лучший способ, с которым я столкнулся, -

  1. Использовать lineage для хранения \ sort \ trace trees. Этого более чем достаточно и работает в тысячу раз быстрее, чем любой другой подход. Он также позволяет оставаться на этом шаблоне, даже если DB изменится (поскольку ANY db позволит использовать этот шаблон)
  2. Использовать функцию, определяющую линию для конкретного идентификатора.
  3. Использовать как вы хотите (в выборе или в CUD-операциях или даже по заданию).

Линейный подход descr. можно найти там, где, например, Здесь или здесь . Что касается функции - , что - это то, что у меня получилось.

В конце - получилось более или менее простое, относительно быстрое и простое решение.

Тело функции

-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$

CREATE DEFINER=`root`@`localhost` FUNCTION `get_lineage`(the_id INT) RETURNS text CHARSET utf8
    READS SQL DATA
BEGIN

 DECLARE v_rec INT DEFAULT 0;

 DECLARE done INT DEFAULT FALSE;
 DECLARE v_res text DEFAULT '';
 DECLARE v_papa int;
 DECLARE v_papa_papa int DEFAULT -1;
 DECLARE csr CURSOR FOR 
  select _id,parent_id -- @n:=@n+1 as rownum,T1.* 
  from 
    (SELECT @r AS _id,
        (SELECT @r := table_parent_id FROM table WHERE table_id = _id) AS parent_id,
        @l := @l + 1 AS lvl
    FROM
        (SELECT @r := the_id, @l := 0,@n:=0) vars,
        table m
    WHERE @r <> 0
    ) T1
    where T1.parent_id is not null
 ORDER BY T1.lvl DESC;
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
    open csr;
    read_loop: LOOP
    fetch csr into v_papa,v_papa_papa;
        SET v_rec = v_rec+1;
        IF done THEN
            LEAVE read_loop;
        END IF;
        -- add first
        IF v_rec = 1 THEN
            SET v_res = v_papa_papa;
        END IF;
        SET v_res = CONCAT(v_res,'-',v_papa);
    END LOOP;
    close csr;
    return v_res;
END

И тогда вы просто

select get_lineage(the_id)

Надеюсь, это поможет кому-то:)

1
задан netdev 3 March 2019 в 08:26
поделиться

1 ответ

Да, это возможно.

Создайте add.ctp в папке Ajax, например:

/Posts
  index.ctp
  /Ajax
  add.ctp

в Postings :: add () установить макет Ajax и с помощью js get / posts / add и render модальные.

Читать:

https://book.cakephp.org/3.0/en/controllers/components/request-handling.html https: //book.cakephp .org / 3.0 / en / views.html # layouts

РЕДАКТИРОВАТЬ:

в контроллере

public function add()
{
   // your code here ...
   if ($this->getRequest()->is('ajax')) {
       // render "add" view in Ajax folder and use "ajax" Layout
       $this->render('Ajax/add', 'ajax')
   }
}

https : //book.cakephp.org/3.0/en/controllers.html#rendering-a-specific-template

РЕДАКТИРОВАТЬ 2 (часть jQuery)

<button type="button" data-toggle="modal" data-remote="<= $this->Url->build(/* ADD HERE YOUR PARAMS*/) 
 ?>" data-target="#myModel">Open Model</button>

$('body').on('click', '[data-toggle="modal"]', function(){
        $($(this).data("target")+' .modal-body').load($(this).data("remote"));
    });  
0
ответ дан Salines 3 March 2019 в 08:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: