Форум русской поддержки Joomla!® CMS
06.12.2016, 04:55:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1] 2  Все   Вниз
  Добавить закладку  |  Печать  
Автор

Помощь с созданием компонента

 (Прочитано 607 раз)
0 Пользователей и 1 Гость смотрят эту тему.
error648398
Осваиваюсь на форуме
***

Репутация: +21/-0
Offline Offline

Сообщений: 180


« : 13.01.2016, 08:40:15 »

Добрый день всем, нужна помощь в понимании работы компонента.

Собственно проблема состоит в создании своих полей для заполнении в админской части, и выводе их в пользовательскую.
Использовал такой сервис:
http://inet-reklama.com/sozdanie-komponenta.html

Но там если выбрать редактируемое поле - появляется простой редактор, а вот как создать своё поле не написано.

И вторая проблема, не могу понять как связать(создать) ссылку с категории (созданной в компоненте), и материалом в этой категории ?

Буду рад любым советам и материалам по данной теме.
Записан
error648398
Осваиваюсь на форуме
***

Репутация: +21/-0
Offline Offline

Сообщений: 180


« Ответ #1 : 13.01.2016, 11:42:39 »

Возможно спонтанно описал, сейчас попробую уточнить.
Мне надо создать подобие такой структуры:

Показать текстовый блок
Нужно сделать что бы на первичной странице отображался список из Блок информации #1,#2,#3, при нажатии на них переходило на страницу Блок информации #1-1... и тд и тп.

Если у кого то есть какие то идеи, то посоветуйте как это реализовать!
Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5314


Крепитесь, други.


« Ответ #2 : 13.01.2016, 12:00:24 »

Здесь все написано, почитайте. https://cmscafe.ru/docs/joomla/developer/component-joomla-2-5
Записан
Sergeyy
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 121


« Ответ #3 : 13.01.2016, 12:04:10 »

А что мешает на com_content это сделать? Или от туда содрать
Записан
error648398
Осваиваюсь на форуме
***

Репутация: +21/-0
Offline Offline

Сообщений: 180


« Ответ #4 : 13.01.2016, 12:39:10 »

Здесь все написано, почитайте. https://cmscafe.ru/docs/joomla/developer/component-joomla-2-5
К сожалению не всё, ну или я очень плохо читаю. Также написано для J2.5, хоть и есть раздел адаптации, но кажись адаптированая версия имеет битую ссылку.
А что мешает на com_content это сделать? Или от туда содрать
Наверное не опытность, достаточно трудно сдирать то, в чём не достаточно разбираешься.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #5 : 13.01.2016, 12:53:27 »

Добрый день всем, нужна помощь в понимании работы компонента.

Собственно проблема состоит в создании своих полей для заполнении в админской части, и выводе их в пользовательскую.
Использовал такой сервис:
http://inet-reklama.com/sozdanie-komponenta.html

Но там если выбрать редактируемое поле - появляется простой редактор, а вот как создать своё поле не написано.
Там свое поле не создаеться, только набор стандартных полей!
Но собственные поля создаются довольно просто!
Создаете в components/ваш_компонент/models/fields/  файл с нужным именем например myfield.php! А тут есть описание как создавать поле http://inet-reklama.com/blog/joomla/sozdanie-sobstvennogo-polya-dlya-formy-v-joomla-2-5.html, а дальше после создания поля вам если вы его назвали например myfield то в XML формы components/ваш_компонент/models/forms/название_вида.xml просто вставить свое поле:
<field name="name" type="myfield" label="Мое поле" />


И вторая проблема, не могу понять как связать(создать) ссылку с категории (созданной в компоненте), и материалом в этой категории ?
Не совсем понятно где вы хотите что то связать? В админке или пользовательской части?
Записан
error648398
Осваиваюсь на форуме
***

Репутация: +21/-0
Offline Offline

Сообщений: 180


« Ответ #6 : 13.01.2016, 12:56:17 »

Там свое поле не создаеться, только набор стандартных полей!
Но собственные поля создаются довольно просто!
Создаете в components/ваш_компонент/models/fields/  файл с нужным именем например myfield.php! А тут есть описание как создавать поле http://inet-reklama.com/blog/joomla/sozdanie-sobstvennogo-polya-dlya-formy-v-joomla-2-5.html, а дальше после создания поля вам если вы его назвали например myfield то в XML формы components/ваш_компонент/models/forms/название_вида.xml просто вставить свое поле:
<field name="name" type="myfield" label="Мое поле" />

Не совсем понятно где вы хотите что то связать? В админке или пользовательской части?

По первому пункту понятно, большое спасибо за пояснения.
UPD:
Не совсем понятно как вывести информацию с созданного поля на сайте.

По второму пункту:
Возможно спонтанно описал, сейчас попробую уточнить.
Мне надо создать подобие такой структуры:

Показать текстовый блок
Нужно сделать что бы на первичной странице отображался список из Блок информации #1,#2,#3, при нажатии на них переходило на страницу Блок информации #1-1... и тд и тп.

Если у кого то есть какие то идеи, то посоветуйте как это реализовать!

« Последнее редактирование: 13.01.2016, 13:01:35 от error648398 » Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #7 : 13.01.2016, 12:57:59 »

Блок информации #1 это категория, а Блок информации #1-1,   Блок информации #1-2,  Блок информации #1-3 это материалы категории?
Записан
Sergeyy
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 121


« Ответ #8 : 13.01.2016, 13:02:59 »

Неужеле проще написать компонент...
Писать, а потом всовывать туда функции которые есть в дефолт. компонентах
Ваша задача, как я понял спокойно решается стандартными средствами
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #9 : 13.01.2016, 13:05:02 »

Ваша задача, как я понял спокойно решается стандартными средствами
а если надо вывести список и в них список материалов прикрепленных к этим категориям, то как стандартными средствами это сделать?!
Записан
error648398
Осваиваюсь на форуме
***

Репутация: +21/-0
Offline Offline

Сообщений: 180


« Ответ #10 : 13.01.2016, 13:06:46 »

Блок информации #1 это категория, а Блок информации #1-1,   Блок информации #1-2,  Блок информации #1-3 это материалы категории?
да
Записан
error648398
Осваиваюсь на форуме
***

Репутация: +21/-0
Offline Offline

Сообщений: 180


« Ответ #11 : 13.01.2016, 13:08:34 »

Неужеле проще написать компонент...
Писать, а потом всовывать туда функции которые есть в дефолт. компонентах
Ваша задача, как я понял спокойно решается стандартными средствами
Боюсь что не решается
Записан
robert
Профи
********

Репутация: +343/-11
Offline Offline

Пол: Мужской
Сообщений: 3582


« Ответ #12 : 13.01.2016, 13:11:56 »

Боюсь что не решается
Стандартными средствами, наверное, нет. Но, IMHO, необязательно написать целый компонент для такой задачи: можно модифицировать com_content.
Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5314


Крепитесь, други.


« Ответ #13 : 13.01.2016, 13:16:07 »

Стандартными средствами, наверное, нет. Но, IMHO, необязательно написать целый компонент для такой задачи: можно модифицировать com_content.
Модифицировать стандартные компоненты нельзя, затрется при обновлении. А если копировать в другую папку и там модифицировать - то легче воспользоваться сервисом Истана, Компонент создается вполне рабочий и без всяких ненужностей.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #14 : 13.01.2016, 13:16:57 »

1. в классе модели добавить метод:
Код
/**
* Формируем спискок
* @return mixed
*/

public function getList()
{
$query = $this->getDbo()->getQuery( true )
->select( 'id, title, alias' )
->from( '#__categories' )
->where( 'extension=' . $this->getDbo()->quote( 'com_ваш_компонент' ) )
->where( 'published=1' )
->order( 'lft ASC' );
$categories = $this->getDbo()->setQuery( $query )->loadObjectList( 'id' );
$cid = array();
foreach ( $categories as &$category ) {
$category->articles = array();
$cid[] = $category->id;
}
 
if ( count( $cid ) ) {
$query = $this->getDbo()->getQuery( true )
->select( 'id, title, alias, catid' )
->from( '#__ВАША_ТАБЛИЦА_С_ЗАПИСЯМИ' )
->where( 'catid IN(' . implode( ',', $cid ). ')' );
$articles = $this->getDbo()->setQuery( $query )->loadObjectList();
foreach ( $articles as $article ) {
if ( isset( $categories[$article->catid] ) ) {
$categories[$article->catid]->articles[] = $article;
}
}
 
}
return $categories;
}
 

2. в виде в методе display написать
Код
$this->categories= $this->get('List');

3. в файле шаблона вида выполнить перебор записей:
Код
<ul>
<?php foreach ( $this->categories as $category ): ?>
<li>
<?php echo $category->title; ?>
<?php if ( count( $category->articles ) ): ?>
<ul>
<?php foreach ( $category->articles as $article ): ?>
<li><a href="#"><?php echo $article->title; ?></a></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
 
Записан
Sergeyy
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 121


« Ответ #15 : 13.01.2016, 13:23:52 »

а если надо вывести список и в них список материалов прикрепленных к этим категориям, то как стандартными средствами это сделать?!
Пропустил. Тогда да не как.

Записан
robert
Профи
********

Репутация: +343/-11
Offline Offline

Пол: Мужской
Сообщений: 3582


« Ответ #16 : 13.01.2016, 13:48:02 »

Модифицировать стандартные компоненты нельзя, затрется при обновлении.
Да, там ни одной точки для плагина.
Записан
Aleks.Denezh
Практически профи
*******

Репутация: +372/-4
Offline Offline

Пол: Мужской
Сообщений: 2762



« Ответ #17 : 13.01.2016, 13:58:09 »

ну вообще то я сильно подозреваю что в com_content можно сделать свой вид и модель и с помощью их все вывести, и скорее всего ничего при обновлении не затрется, но на 100% не уверен )
Записан
error648398
Осваиваюсь на форуме
***

Репутация: +21/-0
Offline Offline

Сообщений: 180


« Ответ #18 : 13.01.2016, 14:03:05 »

Спс попробую
« Последнее редактирование: 13.01.2016, 14:46:34 от error648398 » Записан
robert
Профи
********

Репутация: +343/-11
Offline Offline

Пол: Мужской
Сообщений: 3582


« Ответ #19 : 13.01.2016, 14:03:09 »

ну вообще то я сильно подозреваю что в com_content можно сделать свой вид и модель и с помощью их все вывести, и скорее всего ничего при обновлении не затрется, но на 100% не уверен )
Точно. Совсем забыл, что сам уже проделал такое, чтобы скрестить com_content с com_tags. И ничего не стирается.
Записан
error648398
Осваиваюсь на форуме
***

Репутация: +21/-0
Offline Offline

Сообщений: 180


« Ответ #20 : 19.01.2016, 01:25:11 »

Подскажите пожалуйста.
Например я вывел список записей через JModelList, у меня вывелось n-ое количество записей, все нормально, но мне надо что бы при нажатии на одну из записей - ссылка вела на вывод единичной данной записи.
Записан
error648398
Осваиваюсь на форуме
***

Репутация: +21/-0
Offline Offline

Сообщений: 180


« Ответ #21 : 19.01.2016, 02:04:52 »

1. в классе модели добавить метод:
Код
/**
* Формируем спискок
* @return mixed
*/

public function getList()
{
$query = $this->getDbo()->getQuery( true )
->select( 'id, title, alias' )
->from( '#__categories' )
->where( 'extension=' . $this->getDbo()->quote( 'com_ваш_компонент' ) )
->where( 'published=1' )
->order( 'lft ASC' );
$categories = $this->getDbo()->setQuery( $query )->loadObjectList( 'id' );
$cid = array();
foreach ( $categories as &$category ) {
$category->articles = array();
$cid[] = $category->id;
}
 
if ( count( $cid ) ) {
$query = $this->getDbo()->getQuery( true )
->select( 'id, title, alias, catid' )
->from( '#__ВАША_ТАБЛИЦА_С_ЗАПИСЯМИ' )
->where( 'catid IN(' . implode( ',', $cid ). ')' );
$articles = $this->getDbo()->setQuery( $query )->loadObjectList();
foreach ( $articles as $article ) {
if ( isset( $categories[$article->catid] ) ) {
$categories[$article->catid]->articles[] = $article;
}
}
 
}
return $categories;
}
 

2. в виде в методе display написать
Код
$this->categories= $this->get('List');

3. в файле шаблона вида выполнить перебор записей:
Код
<ul>
<?php foreach ( $this->categories as $category ): ?>
<li>
<?php echo $category->title; ?>
<?php if ( count( $category->articles ) ): ?>
<ul>
<?php foreach ( $category->articles as $article ): ?>
<li><a href="#"><?php echo $article->title; ?></a></li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
 

Спасибо за помощь, но наверное я не очень точно написал.
В идеале мне бы хотелось получить такую модель:
Категория
 |
   Блок информации #1-1
  |
   Блок информации #1-2
  |
   Блок информации #1-3
Где при нажатии на ссылку любого блока информации, открывалась страница с одиночной записью данных, данного блока.
Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5314


Крепитесь, други.


« Ответ #22 : 19.01.2016, 06:57:59 »

Какие виды вы создалимна фронте?
Записан
error648398
Осваиваюсь на форуме
***

Репутация: +21/-0
Offline Offline

Сообщений: 180


« Ответ #23 : 19.01.2016, 11:28:39 »

Какие виды вы создалимна фронте?

через сайт http://inet-reklama.com/sozdanie-komponenta.html

name1\tmpl\default.php
Показать текстовый блок
name1\view.html.php
Показать текстовый блок

name2\tmpl\default.php
Показать текстовый блок
name2\view.html.php
Показать текстовый блок

Хотя у меня есть подозрения что это неправильно, и надо создать один вид, и дать ему два вывода в виде списка и в виде одиночной записи
Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5314


Крепитесь, други.


« Ответ #24 : 19.01.2016, 14:16:26 »

Вот же у вас ссылка на материал в name1\tmpl\default.php
Код:
<a href="<?php echo JRoute::_( 'index.php?view=name1&id=' . $item->id . ':' . $item->alias ); ?>"><?php echo $item->title; ?></a>
Правда неправильная немного, должно быть еще option=com_вашкомпонент
Записан
error648398
Осваиваюсь на форуме
***

Репутация: +21/-0
Offline Offline

Сообщений: 180


« Ответ #25 : 19.01.2016, 14:27:50 »

Вот же у вас ссылка на материал в name1\tmpl\default.php
Код:
<a href="<?php echo JRoute::_( 'index.php?view=name1&id=' . $item->id . ':' . $item->alias ); ?>"><?php echo $item->title; ?></a>
Правда неправильная немного, должно быть еще option=com_вашкомпонент
Ссылка то сформирована, при нажатии на неё адресная строка принимает вид:
../name1/1-1
Но отображает всё тот же список записей, а хотелось бы одиночную запись материала.


Записан
Sergeyy
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 121


« Ответ #26 : 19.01.2016, 14:39:11 »

Спасибо за помощь, но наверное я не очень точно написал.
В идеале мне бы хотелось получить такую модель:
Категория
 |
   Блок информации #1-1
  |
   Блок информации #1-2
  |
   Блок информации #1-3
Где при нажатии на ссылку любого блока информации, открывалась страница с одиночной записью данных, данного блока.

Я правильно понимаю?(или не понимаю)
На странице нужно вывести

Описание категории
--Описание материала
--Описание материала
--Описание материала

При нажатии на материал переходим на его страницу

Или нужно несколько Категорий и описаний материалов на одной странице
а если надо вывести список и в них список материалов прикрепленных к этим категориям, то как стандартными средствами это сделать?!
Записан
error648398
Осваиваюсь на форуме
***

Репутация: +21/-0
Offline Offline

Сообщений: 180


« Ответ #27 : 19.01.2016, 14:48:22 »

Я правильно понимаю?(или не понимаю)

Или нужно несколько Категорий и описаний материалов на одной странице
Вы правильно понимаете.
Для списка категорий одна страница, для списка материалов вторая страница, и для каждого материала своя отдельная страница.

Но можно упростить задачу, на одной странице весь список материалов, с ссылками на отдельную страницу для каждого материала.

Записан
Sergeyy
Осваиваюсь на форуме
***

Репутация: +2/-0
Offline Offline

Пол: Мужской
Сообщений: 121


« Ответ #28 : 19.01.2016, 15:01:58 »

Тогда точно не понимаю!
Принципиально писать свой компонент?
Компонент Контакты в нем три вида:
1 список категорий
2 список контактов
3 контакт
components/com_contact/views/categories
components/com_contact/views/category
components/com_contact/views/contact

Преопределяем шаблоны tmpl/default.php под себя и готово
Записан
error648398
Осваиваюсь на форуме
***

Репутация: +21/-0
Offline Offline

Сообщений: 180


« Ответ #29 : 19.01.2016, 15:07:46 »

Тогда точно не понимаю!
Принципиально писать свой компонент?
Компонент Контакты в нем три вида:
1 список категорий
2 список контактов
3 контакт
components/com_contact/views/categories
components/com_contact/views/category
components/com_contact/views/contact

Преопределяем шаблоны tmpl/default.php под себя и готово
Спс за наводку, просто первый раз пытаюсь сделать компонент и хотелось бы понять принципы работы некоторых моментов.
А переделка не всегда внесет ясность и понимания написанного.
Записан
Страниц: [1] 2  Все   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet