Новости Joomla

0 Пользователей и 1 Гость просматривают эту тему.
  • 125 Ответов
  • 6299 Просмотров
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
А так веселее жить ;)
;D
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
А почему для этого не использовать контроллер?
Контроллер используется, когда raw-вьюха уже отображена, а когда страница 1 раз открывается - контролер каким боком?
Я только сегодня ночью догнал (у то не уверен), в какой последовательности в mvc что выполняется: у компонента сразу напрямую вызывается вьюха, которая цепляет модель, получает данные и отображает их в шаблоне вьюхи, далее по команде клиента с фронта дергается контроллер на выполнение ответных клиенту действий, который потом повторно отображает указанную в контроллере же (ибо контроллер к вьюхе не имеет жесткой привязанности вообще) вьюху.

Только не понятно зачем все эти манипуляции то?!
Вот никто качнуть архив не захотел, посмотреть что за бардак там.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Контроллер используется, когда raw-вьюха уже отображена, а когда страница 1 раз открывается - контролер каким боком?
и это
Я только сегодня ночью догнал (у то не уверен), в какой последовательности в mvc что выполняется: у компонента сразу напрямую вызывается вьюха, которая цепляет модель, получает данные и отображает их в шаблоне вьюхи, далее по команде клиента с фронта дергается контроллер на выполнение ответных клиенту действий, который потом повторно отображает указанную в контроллере же (ибо контроллер к вьюхе не
Говорит что вы не поняли в какой последовательности MVC выполняется ))
Есть точка входа в приложение, это ваш файл Crmtourism.php
Точка входа вызывает контроллер controller.php
Ваш Контроллер выполняет задачу которые вы передаете в task=taskName
Задача должна называться как и содержимое переменной task
то есть public function taskName()
Если задача не передана то вызывает задача по умолчанию в контроллере, эта задача  DISPLAY! И отображает вид который должен быть передан в переменной view=myView! Если вид не передан то вызовет тот вид который указан у вас в переменной $default_view в классе контроллере по умолчанию!
Когда страница хоть один раз открывается контроллер всем боком! Ибо именно он говорит что нужно отобразить этот вид ) Все проходит через контроллер!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Все так, это все понял, просто мой вариант был не полный/не точный и описывает последовательность после вызова display() указанного вида/вида по умолчанию.
Мне нудно вывести один вид, а внутрь него, посередине, вставить другой.
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Все так, это все понял, просто мой вариант был не полный/не точный и описывает последовательность после вызова display() указанного вида/вида по умолчанию.
Мне нудно вывести один вид, а внутрь него, посередине, вставить другой.
Это противоречит логики MVC вообще то ) Для таких случаев используют помощники вида!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
во шаблоне первого вида:
Код
тут куча html-кода и вывода данных первично вызванного вида

затем инициируем вывод вторичного вида:
<div id="pcprl">
  <?php echo $this->renderView('имя', 'компонент'); ?>
</div>

тут следующая куча html-кода и вывода данных первично вызванного вида
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
вот до сих пор непонятно, помощник вида - это что? хелпер?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
вот до сих пор непонятно, помощник вида - это что? хелпер?
Именно!
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Ну, я тогда просто избавился от лишнего файла, который вызывается только в одном месте и содержит всего дюжину строк, переместив его код в более удобное место.
Просто суть в том, что не нужно ограничиваться рамками только одного MVC. Joomla позволяет сделать практически что угодно, и в итоге это вопрос знаний инструментов и умения их применения. Как-то так :)

Ок, как бы сделали вы?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Ну, я тогда просто избавился от лишнего файла, который вызывается только в одном месте и содержит всего дюжину строк, переместив его код в более удобное место.
Так зачем вы его тогда делали вообще этот файл если он у вас в одном месте вызывается?)
Почему вы не сделали все это в одной модели, и одном виде? Зачем нужно было рендерить второй вид в первом?)

Ок, как бы сделали вы?
Я же подробно не знаю задачу ) Но явно не так ) Я за свою практику сделал больше 300 сайтов, но нив  одном к такому извращению не прибегал )
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
а как еще к данным, которые выводятся во втором виде, применить пагинацию и при этом не перезагружать при листании всю страницу?
тем более, что в первом виде используется модель JModelItem, тогда как для пагинации нужна JModelList
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Я же подробно не знаю задачу )
(абстрактно):
1. Вывести единичную запись, привязанную к текущему авторизованному пользователю, из таблицы1
2. Из таблицы2 вывести массив записей, привязанных к выводимой записи из таблицы1
3. Из таблицы3 вывести массив записей, привязанных к выводимой записи из таблицы1, и применить к ним пагинацию без перезагрузки всей страницы (в т.ч. чтобы не дергать повторно запросы, выполняемые в п.1 и в п.2).
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
а как еще к данным, которые выводятся во втором виде, применить пагинацию и при этом не перезагружать при листании всю страницу?
Аяксом листать! В пределах одного вида!

тем более, что в первом виде используется модель JModelItem, тогда как для пагинации нужна JModelList
Я сейчас вас шокирую но если вы в JModelList
напишите
public function getItem(){
 и тут получите нужную вам запись
}
То ничего страшного не произойдет )))
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Ок, если приаттачу архив с действующим работающим вариантом (только задействованные файлы), покажете на примере, как правильно?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
(абстрактно):
1. Вывести единичную запись, привязанную к текущему авторизованному пользователю, из таблицы1
2. Из таблицы2 вывести массив записей, привязанных к выводимой записи из таблицы1
3. Из таблицы3 вывести массив записей, привязанных к выводимой записи из таблицы1, и применить к ним пагинацию без перезагрузки всей страницы (в т.ч. чтобы не дергать повторно запросы, выполняемые в п.1 и в п.2).
Все это делается в пределах одного вида без костылей!
Выводится все в одном виде!
Модель наследуется от JModelList В ней получаете список и пагинацию! Дополнительно создаете методы для получения данных по пункту 1 и 2
Для листания аяксом пункта 3 банально листать с добавлением format=raw
В вашем виде создать файл view.raw.php
Скопировать содержимое view.html.php в него и удалить в  view.raw.php код на получение пунктов 1.2 (оставить только получение 3 пункта)
Создать файл в шаблоне вида (в папке tmpl) например list.php в него скопировать ту часть которая у вас выводит список и пагинацию! в файле view.raw.php в методе display() насильно установить другой слой для вывода через $this->setLayout('list');
*

fsv

  • Живу я здесь
  • 2781
  • 411 / 2
Цитировать
Всем откликнувшимся спасибо!
То, что получилось, не видно, ссылки нет. Но в сайте-примере от zomby6888 не учтено изменение URL при пагинации и хистори браузера (кнопка «Назад»). Как сейчас?

Цитировать
Список2 - весьма большой, необходимо вывести его с пагинацией
Насколько большой? Если речь о нескольких десятках/сотнях ссылок, зачем гонять http-запросы, дергать базу и все это городить? Получайте все сразу, засовывайте в массив. На фронте выводите первые N записей массива + псевдопагинация на js + изменение URL'a + работа с browser history

Цитировать
В скрипте перехватываем клик по ссылке
Оба забыли отменить действие по умолчанию при клике по ссылке. ;)
Веб-разработка: заказ. Только новая разработка.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
То, что получилось, не видно, ссылки нет. Но в сайте-примере от zomby6888 не учтено изменение URL при пагинации и хистори браузера (кнопка «Назад»). Как сейчас?
О, вот как раз это-то не требуется, более того, даже вредно будет

Насколько большой? Если речь о нескольких десятках/сотнях ссылок, зачем гонять http-запросы, дергать базу и все это городить? Получайте все сразу, засовывайте в массив. На фронте выводите первые N записей массива + псевдопагинация на js + изменение URL'a + работа с browser history
Уфф, скока много букав, так сразу и не пойму, как это. Список громадный, за месяц свыше тысячи накапливается.

Оба забыли отменить действие по умолчанию при клике по ссылке. ;)
Ну с js у меня по прежнему туго ((( тут без конкретного примера мне никак

Все это делается в пределах одного вида без костылей!
Выводится все в одном виде!
Модель наследуется от JModelList В ней получаете список и пагинацию! Дополнительно создаете методы для получения данных по пункту 1 и 2
Для листания аяксом пункта 3 банально листать с добавлением format=raw
В вашем виде создать файл view.raw.php
Скопировать содержимое view.html.php в него и удалить в  view.raw.php код на получение пунктов 1.2 (оставить только получение 3 пункта)
Создать файл в шаблоне вида (в папке tmpl) например list.php в него скопировать ту часть которая у вас выводит список и пагинацию! в файле view.raw.php в методе display() насильно установить другой слой для вывода через $this->setLayout('list');
Ок, пробую
*

fsv

  • Живу я здесь
  • 2781
  • 411 / 2
Цитировать
Список громадный, за месяц свыше тысячи накапливается.
за год 12 тыс.? и далее... до бесконечности? и все вывести надо? о чем хоть речь? )
тогда так не пойдет, конечно
Веб-разработка: заказ. Только новая разработка.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
за год 12 тыс.? и далее... до бесконечности? и все вывести надо? о чем хоть речь? )
тогда так не пойдет, конечно
да, надо все (типа, что-то вроде истории операций)

Создать файл в шаблоне вида (в папке tmpl) например list.php в него скопировать ту часть которая у вас выводит список и пагинацию! в файле view.raw.php в методе display() насильно установить другой слой для вывода через $this->setLayout('list');
И как мне посередине слоя default вывести слой list?
непонятно, каким вообще образом будет вызываться view.raw.php, откуда?
« Последнее редактирование: 27.02.2015, 14:03:29 от AlekVolsk »
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Вот как бы я сделал:
index.php?option=com_test&&view=test&id=204 (вызывыть так, id = id существующего юзера в папке users ), так же запрос на выборку из моей таблицы где привязка по created_by с юзером переданным в &id=! Взять свою таблицу для теста!
« Последнее редактирование: 27.02.2015, 14:06:57 от Istaan »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Каждый раз передавать id? А если вьюха привязана к пункту меню?

И как мне посередине слоя default вывести слой list?
непонятно, каким вообще образом будет вызываться view.raw.php, откуда?
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
слой list
Код: php-brief
<form action="" method="post" id="pcprl-form">
  <table class="uk-table" style="margin-bottom:20px!important;">
    <?php // вывод данных ?>
  </table>
  <div class="pagination">
    <?php echo $this->pagination->getPagesLinks(); ?>
    <div class="limitbox">
      <?php echo JText::_('COM_CRMT_RQ_PAGELIMIT').$this->pagination->getLimitBox(); ?>
    </div>
  </div>
  <input type="hidden" name="task" value="ajax.pcprl">
  <input type="hidden" name="format" value="raw">
</form>

слой default
Код: php-brief
<div class="item-page pcp uk-panel uk-panel-box">
  <div class="uk-grid">
    <div class="uk-width-1-1">
      <div class="item-content">

        <div class="page-header">
          <h1><?php if ($this->params->get('show_page_heading')) echo $this->escape($this->params->get('page_heading')); ?></h1>
        </div>

        <div class="uk-panel uk-panel-box small muted uk-article-lead"><?php echo JText::_('COM_CRMT_RQL_HEADER'); ?></div>
        <div id="pcprl">
          <?php // КАК МНЕ СЮДА ЗАПИХАТЬ СОДЕРЖИМОЕ СЛОЯ LIST ?>
        </div>

        <div class="uk-panel uk-panel-box small muted uk-article-lead" style="margin-top:100px;"><?php echo JText::_('COM_CRMT_ST_HEADER'); ?></div>
        <form action="" id="pcpstform" method="post">
          <?php // тут данные п.2 ?>
        </form>

        <div class="uk-panel uk-panel-box small muted uk-article-lead" style="margin-top:100px;"><?php echo JText::_('COM_CRMT_PRMP_HEADER'); ?></div>
        <div class="uk-grid">
          <?php // тут данные п.1 ?>
        </div>

      </div>
    </div>
  </div>

</div>
<script>
function updateEvents(form, page) {
  var url = page || form.attr('action');
  jQuery.ajax({
    type: 'POST',
    url: url,
    data: form.serialize(),
    success: function(data) {
      var container = form.attr('id').split('-')[0];
      jQuery('#'+container).html(data);
      bindEvents();
    }
  });
  return false;
}

function bindEvents() {
  var forms = ['#pcprl-form'];
  for(var i=0; i < forms.length; i++) {
    var form = jQuery(forms[i]);
    form.find('select#limit').attr('onchange', '').change(function() {
      updateEvents(jQuery(this).parents('form'));
    });
    form.find('.pagination').on('click', 'a', function(event) {
      event.preventDefault();
      var page = this.href;
      updateEvents(jQuery(this).parents('form'), page);
    });
  }
}

jQuery(document).ready(function() {
  bindEvents();
});
</script>
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
AlekVolsk а зачем вы пагинацию в форму засунули оО
И я же вам дал готовый пример )
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Ваш пример не отвечает на главный вопрос: как мне посередине слоя default вывести слой list?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Ваш пример не отвечает на главный вопрос: как мне посередине слоя default вывести слой list?
Слой list и слой default разные вещи! Все что в list это копия того что в блоке <div class="list-wrapper"></div> аяксом загружается то что получено через view.raw.php в list-wrapper
И весь этот код можно вынести в помощник вида (если так боитесь за количество кода), или в Layouts
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
аяксом загружается то что получено через view.raw.php в list-wrapper
а ппри первичной загрузки вьюхи? т.е. мне придется прописывать одинаковый код и внутри list-wrapper и в list?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
а ппри первичной загрузки вьюхи? т.е. мне придется прописывать одинаковый код и внутри list-wrapper и в list?
Или писать одинаковый код, или вынести этот код в helper/Layouts
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Хотя че это я вру )
Код: php
<div class="list-wrapper">
<?php
$this->setLayout( 'list' );
echo $this->loadTemplate();
?>
</div>
Отрендерит то что в слое list! И весь код списка можно хранить только в файле list! И никаких дублей кода!
« Последнее редактирование: 27.02.2015, 15:47:11 от Istaan »
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Ну да только к этому слою лист нужно еще прикрутить отедельную модель и пагинацию. Там ведь список должен быть. Кстатии про с контроллер я чет не подумал. Действительно можно было вызвать контроллер по умолчанию и с помощью него разрулить все. Как то так:
Код: php
public function renderView($name, $componentName)
{
   $controller = JControllerLegacy::getInstance($componentName);
   $model = $controller->getModel($name);  
   $view = $controller->getView($name, 'raw');  
   $view->setModel($model);
   ob_start();
       $view->display();
       $out = ob_get_clean();
   return $out;
}

По мне так удобно любую raw вьюху можно отрисовать так. Можно в хелпер засунуть метод, неважно..
« Последнее редактирование: 27.02.2015, 16:11:28 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Ну да только к этому слою лист нужно еще прикрутить отедельную модель и пагинацию. Там ведь список должен быть. Кстатии про с контроллер я чет не подумал. Действительно можно было вызвать котроллер по умолчанию и с помощью него отрендерить вьюху.:
Только зачем для всего этого делать две вьюхи то?! Все что нужно AlekVolsk делается в пределах одного вида средствами системы и без костылей!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Применение ajax (Аякс) в модуле Joomla

Автор tm2010

Ответов: 34
Просмотров: 5314
Последний ответ 26.09.2020, 09:38:35
от b2z
Обработка AJAX в компоненте Joomla!3

Автор balancer

Ответов: 33
Просмотров: 11921
Последний ответ 23.07.2020, 07:45:53
от Dolphin4ik_1
Пагинатор в нестандартном компоненте

Автор sesil

Ответов: 8
Просмотров: 1281
Последний ответ 04.09.2019, 11:24:30
от sesil
Не видится файлы языкового пакета в созданном компоненте

Автор khachatur86

Ответов: 0
Просмотров: 1717
Последний ответ 30.03.2019, 23:35:26
от khachatur86
Стандартная система рейтингов в custom компоненте

Автор platonische

Ответов: 1
Просмотров: 1014
Последний ответ 12.02.2019, 16:55:03
от platonische