Плагин контент-конструктора - MiniCCK для контента Joomla

  • 553 Ответов
  • 31746 Просмотров

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

*

Arkadiy

  • *****
  • 5342
  • 440
  • Крепитесь, други.
Решил и я добавить в эту копилку. Итак - ловите!

MiniCCK - это плагин к компоненту com_content Joomla, позволяющий добавить контенту произвольное количество дополнительных полей разного типа.

Поддерживаемые типы полей:

  • Выпадающий список
  • Радиокнопки
  • Чекбоксы
  • Строка
  • Большое текстовое поле
  • Изображение

 Плагин писался по мотивам статьи Adding custom fields to the article component Franz Korntner. Получилось гибкое и простое решение проблемы добавления полей к контенту Joomla.

Из недостатков я вижу только два - необходимость применять патч к компоненту com_content и единственный тип контента, который можно создать. Но второй недостаток - это не совсем недостаток, для Joomla есть достаточно компонентов CCK которые могут делать просто невообразимые вещи с контентом, а наш плагин занмает нишу между обычным контентом и компонентом CCK, которая достаточно востребована. Многие из-за одного дополнитеьного поля устанавливают CCK что зачастую не оправдано.

С первым недостатком к сожалению приходится мириться т.к. в ветке 2.5 этот функционал реализован не будет, но в ветке 3 есть большая и оправданная надежда получить нужный для плагина функционал из коробки. На 2.5 придется после каждого обновления проверять работоспособность плагина и в случае поломки заново устанавливать патч, хотя вероятность такого разворота событий очень мала - код 2.5 заморожен, правятся только ошибки и дыры.

Описание плагина, скачать здесь.

Установка, настройка и работа плагина описана в этой статье.

Старница проекта на гитхабе здесь.

MiniCCK на JED здесь.
« Последнее редактирование: 02.02.2015, 20:01:45 от Arkadiy »

Удачного вам плаванья.
Лучший ССК всех времен Cobalt


*

Arkadiy

  • *****
  • 5342
  • 440
  • Крепитесь, други.
Посмотрел пакет обновления с 2.0.8 на 2.0.9 и огорчился. В пакете присутствуют все php файлы Joomla без разбора, правленные они или нет, так-что патч с каждым обновлением будет затираться. Сравнил файлы патча с файлами пакета обновления, оказалось что только в одном файле есть изменения (относительно непатченных файлов 2.0.6, для которой изготовлен патч) и то незначительные, можно накатывать старый патч, хотя я сделал новый.

*

voland

  • ********
  • 9358
  • 420
  • СКАЙП утерян! Пишите в телеграм @volandku
Патчи увы не айс.
Может есть возможность вынести всё в системные плагины?

*

Arkadiy

  • *****
  • 5342
  • 440
  • Крепитесь, други.
Смысла нет, этот патч продвигается и с большой долей вероятности триггеры, которыми отличается патч от исходных файлов, появятся в Joomla 3. Ну а переспектива ессно за ней.

*

Arkadiy

  • *****
  • 5342
  • 440
  • Крепитесь, други.
К тому-же в тех местах, где установлены триггеры для MiniCCK, нет никаких триггеров, в т.ч. и системных. А если обрабатывать каким-то образом весь контент страницы, для выискивания места куда вставлять свое содержимое, всеравно необходимо поставить какую-то метку. Ну или я чего-то не понимаю.

Смысла нет, этот патч продвигается и с большой долей вероятности триггеры, которыми отличается патч от исходных файлов, появятся в Joomla 3. Ну а переспектива ессно за ней.
Я тоже сильно верил в Joomla очень долго. В то что ни сделают то и то уже в следующей версии. Но оказалось что даже с разумными довадами этого до сих пор нету. Поэтому и пришлось делать ССК не основаный на Joomla. И честно сказать рад что принял такое решение когда читаю посты как эти. :) Извините конечно за иронию :)
Лучший ССК всех времен Cobalt

*

Arkadiy

  • *****
  • 5342
  • 440
  • Крепитесь, други.
Ну я не намерен останавливаться на этом CCK, у меня в планах, правда не очень определенных, полноценный ССК, ориентированный на профессионалов, аналог информационных систем в HostCMS, простой в управлении и создании пользовательского интерфейса.

Ну я не намерен останавливаться на этом CCK, у меня в планах, правда не очень определенных, полноценный ССК, ориентированный на профессионалов, аналог информационных систем в HostCMS, простой в управлении и создании пользовательского интерфейса.
Это прекрасно. Но вот главный вопрос всеже остается. Будет ли это расширение контента Joomla как у сиблод или это будет самостоятельное расширение. Я советую второе.
Лучший ССК всех времен Cobalt

*

voland

  • ********
  • 9358
  • 420
  • СКАЙП утерян! Пишите в телеграм @volandku
Блин.
CCK это хорошо.

Но когда их уже штук 10 изобретать очередной велосипед?

Либо что-то, принципиально отличающееся от конкурентов, либо даром не надо, только внимание распылять. ИМХО

*

Arkadiy

  • *****
  • 5342
  • 440
  • Крепитесь, други.
Думаю про второе. Так всем удобнее.

*

Arkadiy

  • *****
  • 5342
  • 440
  • Крепитесь, други.
Блин.
CCK это хорошо.

Но когда их уже штук 10 изобретать очередной велосипед?

Либо что-то, принципиально отличающееся от конкурентов, либо даром не надо, только внимание распылять. ИМХО
Ну так вот я и думаю, хотя резон есть и большой, я бы сравнил нынешние ССК для Joomla и информационные системы HostCMS как кирпичики и пластелин.

*

Arkadiy

  • *****
  • 5342
  • 440
  • Крепитесь, други.

*

slepoy

  • *****
  • 713
  • 21
  • Тотальная шизофазия
Во времена Joomla 1.5 использовал хак ядра для добавления доп. полей и после миграции на J2.5 все было прос*ано.
Т.к. сайт существующий и материалов много, то "переносить" их из com_content в K2, SebLod и тому подобное просто не имеет смысла - не только изменятся ссылки на материалы, но и в модулях (работающих только с com_content) "перенесенные" материалы отображаться не будут.

Потому MiniCCK - это идеальный вариант для меня.

Но пока на тестовом сайте не удалось добиться работоспособности плагина с типами следующих полей: чекбоксы и выпадающий список (см. скриншот). Не разобрался куда вставлять двойные двоеточия

Буду благодарен за помощь. Спасибо.

Обновлено: следовало сделать так:
Цитировать
PC::PC
Mac::Mac
PS3::PS3

ПС: а рассматриваете ли возможность разработки плагина для поиска по данным полям?

[вложение удалено Администратором]
« Последнее редактирование: 10.03.2013, 01:48:15 от slepoy »
Помог? Поставь(те) плюс в репутацию.

*

Arkadiy

  • *****
  • 5342
  • 440
  • Крепитесь, други.
Это сделать не проблема, проблема в том, что с каждым релизом готовить новый хак не айс, по этому плагин пока в подвешенном состоянии, будут внедрены изменения из хака в ядро - будет продолжение банкета, не будут - видимо придется свертывать.

видимо придется свертывать.
Задесь других вариантов нет. Зря надеешся что они что то сделают что тебе надо. Даже если ты попытаешься убедить что это важная вещь тебя могут просто проигнорировать. И даже если они это поправят то завтра тебе понадобится что то еще. И рано или позно все равно придется сворачивать или жить с этим и выпускать хаки.

Именно по этому мы свое ССК делаем не зависимым от Joomla.
Лучший ССК всех времен Cobalt

*

Arkadiy

  • *****
  • 5342
  • 440
  • Крепитесь, други.
Ну пока надежда есть. А потраченного на этот плагин вечера не так жалко. Так что будем подождать  :)

Продолжать обязательно надо просто надо поменять вектор. Надо стать независимым от Joomla.
Лучший ССК всех времен Cobalt

*

NightGuard

  • *******
  • 3025
  • 371
  • вжжж-вжжж
Продолжать обязательно надо просто надо поменять вектор. Надо стать независимым от Joomla.
Хватит флудить.
Идеология сверхпотребления более опасна для человечества, чем идеология гитлеровского тоталитаризма

skype: nightguardsrussia - только по рабочим вопросам, любые консультации - платные!

*

Arkadiy

  • *****
  • 5342
  • 440
  • Крепитесь, други.
Продолжать обязательно надо просто надо поменять вектор. Надо стать независимым от Joomla.
Сергей, а вам зачем очередной конкурент? :)

Сергей, а вам зачем очередной конкурент? :)
Не смеши :) И не льсти себе так :)

О конкуренции ни какой речи не идет.
Лучший ССК всех времен Cobalt

*

Очередной вебмастер

  • *****
  • 784
  • 55
  • лысый умный дядя
Блин, как раз то что нужно для простого каталога на com_content.
Можно ли как то добавить возможность исключать категории? Чтоб не во всех крепились поля?
Как на сайте можно манипулировать выводом полей(местом расположения и т.п.)
Создание сайтов на Joomla. Продвижение. Интернет-реклама.
--------
Личный блог
----------
Мой VK
----------
Помог ответ - жми плюс!

*

Arkadiy

  • *****
  • 5342
  • 440
  • Крепитесь, други.
Сделать все можно, но я все жду когда джумловцы триггеры нужные поставят в систему. Вроде обещали, а вроде и не делают. А хаки к каждому апдейту делать мне как-то не с руки, по этому и разработка здесь врядли продолжится. Разве что совсем скучно станет.
Поля на фронт выводятся скопом,
Код
 $article->text = $html.$article->text; 
$html - это вывод плагина. Т.е. он цепляется перед контентом.
« Последнее редактирование: 14.05.2013, 23:42:37 от Arkadiy »

*

smart

  • *******
  • 6843
  • 1297
  • снова дома...
Сделать все можно, но я все жду когда джумловцы триггеры нужные поставят в систему.
А каких именно событий не хватает?

*

Arkadiy

  • *****
  • 5342
  • 440
  • Крепитесь, други.
Эх, я сейчас уже и не помню, надо сделать новый хак на 3.1.1 - в процессе все будет видно. Как сделаю - отпишусь. Но не быстро, занят очень.

*

Arkadiy

  • *****
  • 5342
  • 440
  • Крепитесь, други.
Изменения для Joomla версии 3.1.1:
\administrator\components\com_content\models\article.php со строки 318 прямо перед
Код
return $item;
Код
//Arkadiy huck
        // Get the dispatcher and load the content plugins.
        $dispatcher = JDispatcher::getInstance();
        JPluginHelper::importPlugin('content');
        // Trigger the data preparation event.
        $dispatcher->trigger('onContentPrepareData', array('com_content.article', $item));
        //End of Arkadiy huck

\components\com_content\models\article.php после 233 строки перед
Код
$this->_item[$pk] = $data;
Код
//Arkadiy huck
                // Get the dispatcher and load the content plugins.
                $dispatcher = JDispatcher::getInstance();
                JPluginHelper::importPlugin('content');

                // Trigger the data preparation event.
                $dispatcher->trigger('onContentPrepareData', array('com_content.article', &$data));
                //End of Arkadiy huck

\components\com_content\models\form.php после 142 строки перед
Код
return $value;

Код
//Arkadiy huck
        // Get the dispatcher and load the content plugins.
        $dispatcher = JDispatcher::getInstance();
        JPluginHelper::importPlugin('content');

        // Trigger the data preparation event.
        $dispatcher->trigger('onContentPrepareData', array('com_content.article', &$value));
        //End of Arkadiy huck

\components\com_content\views\form\tmpl\edit.php после строки 71 в список
Код
<!-- Arkadiy huck -->
                <?php
                // Get the form fieldsets.
                $fieldsets = $this->form->getFieldsets();
                foreach ($fieldsets as $name => $fieldset) :
                    if (in_array($fieldset->name, array('image-intro', 'image-full'))) :
                        // this set has already been displayed
                        continue;
                    endif;
                    ?>
                    <li><a href="#extrafield-<?php echo $name; ?>" data-toggle="tab"><?php echo JText::_($fieldset->label);?></a></li>
                    <?php endforeach;?>
                <!-- End of Arkadiy huck -->

перед <div class="tab-pane" id="metadata"> в районе 320 строки
Код
<!-- Arkadiy huck-->
                <?php
                // Get the form fieldsets.
                $fieldsets = $this->form->getFieldsets();
                foreach ($fieldsets as $name => $fieldset) :
                    if (in_array($fieldset->name, array('image-intro', 'image-full'))) :
                        // this set has already been displayed
                        continue;
                    endif;
                    ?>
                <div class="tab-pane" id="extrafield-<?php echo $name;?>">
                    <?php
                    foreach($this->form->getFieldset($fieldset->name) as $field): ?>
                        <?php if ($field->hidden): ?>
                            <?php echo $field->input; ?>
                            <?php else: ?>
                            <div class="control-group">
                                <div class="control-label">
                                    <?php echo $field->label; ?>
                                </div>
                                <div class="controls">
                                    <?php echo $field->input; ?>
                                </div>
                            </div>
                            <?php endif; ?>
                        <?php endforeach; ?>
                </div>
                    <?php endforeach;?>
                <!-- End of Arkadiy huck -->
\administrator\components\com_content\views\article\tmpl\edit.php
после 73 строки
Код
			<!-- Arkadiy huck -->
<ul class="nav nav-tabs">
                <?php
                // Get the form fieldsets.
                $fieldsets = $this->form->getFieldsets();
                foreach ($fieldsets as $name => $fieldset) :
                if (in_array($fieldset->name, array('basic', 'editorConfig', 'basic-limited', 'attribs'))) :
                // this set has already been displayed
                continue;
                endif;
                ?>
                    <li><a href="#extrafield-<?php echo $name; ?>" data-toggle="tab"><?php echo JText::_($fieldset->label);?></a></li>
                <?php endforeach;?>
</ul>
            <!-- End of Arkadiy huck -->

после 242 строки
Код
//Arkadiy huck
           // Get the form fieldsets.
           $fieldsets = $this->form->getFieldsets();
           foreach ($fieldsets as $name => $fieldset) :
                            if (in_array($fieldset->name, array('basic', 'editorConfig', 'basic-limited', 'attribs'))) :
                                // this set has already been displayed
                                continue;
                            endif;
                            ?>
                        <div class="tab-pane" id="extrafield-<?php echo $name;?>">

                            <?php if (isset($fieldSet->description) && trim($fieldSet->description)) : ?>
                            <p class="tip"><?php echo $this->escape(JText::_($fieldSet->description));?></p>
                            <?php endif;

                            foreach($this->form->getFieldset($fieldset->name) as $field): ?>
                                <?php if ($field->hidden): ?>
                                    <?php echo $field->input; ?>
                                    <?php else: ?>
                                        <div class="control-group">
                                            <div class="control-label">
                                                <?php echo $field->label; ?>
                                            </div>
                                            <div class="controls">
                                                <?php echo $field->input; ?>
                                            </div>
                                        </div>
                                    <?php endif; ?>
                                <?php endforeach; ?>


                        </div>
                        <?php endforeach;
                        //End of Arkadiy huck

На 3.1.1 не проверял, только сделал, скорее всего потребуется небольшая доработка там, где выводится HTML (форматирование панели управления изменилось).
Ну и поскольку плагин писался по мотивам статьи Adding custom fields to the article component Franz Korntner http://docs.joomla.org/Adding_custom_fields_to_the_article_component, возможно он сделан не оптимально и все можно улучшить или упростить, в частности это касается вывода HTML в панель управения, возможно достаточно будет вывести туда какое-либо дополнительное свойство, которое плагин будет заполнять готовым HTML.
« Последнее редактирование: 15.05.2013, 09:00:35 от Arkadiy »

*

smart

  • *******
  • 6843
  • 1297
  • снова дома...
Кстати интересно, а почему ContentModelForm наследовали от ContentModelArticle (JModelItem), когда логичнее было бы от JModelForm. Это позволило бы обойти как минимум одну модификацию - JModelForm есть событие onContentPrepareForm.

*

Arkadiy

  • *****
  • 5342
  • 440
  • Крепитесь, други.
Сам патч, проверенный, вид редактирования контента изменен т.к. табы теперь перешли в JHTML http://argens.ru/my-extension/skachat/minicck/minicck-1-0/patch-3-1-1-zip?format=raw
Кстати интересно, а почему ContentModelForm наследовали от ContentModelArticle (JModelItem), когда логичнее было бы от JModelForm. Это позволило бы обойти как минимум одну модификацию - JModelForm есть событие onContentPrepareForm.
Это я не знаю, возможно не подумали.

*

Arkadiy

  • *****
  • 5342
  • 440
  • Крепитесь, други.
Выпущена версия 1.1 плагина. С этой версии плагин не требует хака ядра. Совместим с Joomla 3.1.5.
Новые плюшки:
1. Вывод фронта сделан через шаблон. 
2 .В настройки добавлены опции выбора шаблона и места вывода плагина (сверху или снизу контента).