Quantcast
Channel: Joomla! Forum - community, help and support
Viewing all articles
Browse latest Browse all 2026

Joomla! 4.x Coding • Re: Custom field for module and display data like checkboxes

$
0
0
Replace addfieldpath with addfieldprefix="VPJoomla\Module\Faq\Form\Field".
Now I recreated my field and it look like this:
fields/FAQItemsField.php

Code:

<?phpnamespace VPJoomla\Module\Faq\Field;use Joomla\CMS\Form\FormField;use Joomla\CMS\Factory;use Joomla\CMS\HTML\HTMLHelper;defined('_JEXEC') or die;/** * Custom field for selecting FAQ items from the database. * * @since  Joomla 4.0 */class FAQItemsField extends FormField{protected $type = 'FAQItems';/** * Method to render the field input. * * @return  string  The field HTML. */protected function getInput(): string{// Get database object$db = Factory::getDbo();// Build query to fetch FAQ items$query = $db->getQuery(true)->select($db->quoteName(['id', 'title']))->from($db->quoteName('#__faq_items'))->where($db->quoteName('state') . ' = 1');// Set the query and get the result list$db->setQuery($query);$faqItems = $db->loadAssocList();//$faqItems = $db->loadObjectList();// Start building the checkboxes HTML$html = '<div class="faq-items-checkboxes">';if (!empty($faqItems)) {foreach ($faqItems as $item) {$html .= '<div class="form-check">';$html .= HTMLHelper::_('form.checkboxes', 'params[faq_items][]', $item['id'], $item['title'], 'value', 'text', (array)$this->value, true);$html .= '</div>';}}$html .= '</div>';return $html;}}
This is mod_faq.xml

Code:

<?xml version="1.0" encoding="utf-8"?><extension type="module" client="site" version="4.0" method="upgrade"><name>FAQ Content</name><creationDate>02/04/2024</creationDate><author>2z &amp; zeus07</author><authorEmail>2z.dizayn@gmail.com, zeus071986@gmail.com</authorEmail><authorUrl>https://vpjoomla.school</authorUrl><license>GNU General Public License version 3 or later; see LICENSE.txt</license><version>4.0.0</version><description>MOD_FAQ_XML_DESCRIPTION</description><namespace path="src">VPJoomla\Module\Faq</namespace><files><filename module="mod_faq">mod_faq.php</filename><folder>src</folder><folder>fields</folder><folder>tmpl</folder></files><languages><language tag="en-GB">language/en-GB/en-GB.mod_faq.ini</language><language tag="en-GB">language/en-GB/en-GB.mod_faq.sys.ini</language><language tag="ru-RU">language/ru-RU/ru-RU.mod_faq.ini</language><language tag="ru-RU">language/ru-RU/ru-RU.mod_faq.sys.ini</language></languages><config><fields name="params"><fieldset name="basic"><field name="name" type="text" label="MOD_FAQ_MODULE_TITLE" description="" size="10" /><fields name="faq" addfieldprefix="VPJoomla\Module\Faq\Form\Field"><fieldname="faq_items"type="FAQItems"translate="types"label="MOD_FAQ_SELECT_QUESTION_LABEL"description="MOD_FAQ_SELECT_QUESTION_DESC"multiple="true"required="true"/></fields></fieldset><fieldset name="advanced"><fieldname="layout"type="modulelayout"label="JFIELD_ALT_LAYOUT_LABEL"class="custom-select"/><fieldname="moduleclass_sfx"type="textarea"label="COM_MODULES_FIELD_MODULECLASS_SFX_LABEL"rows="3"/><fieldname="cache"type="list"label="COM_MODULES_FIELD_CACHING_LABEL"default="0"><option value="1">JGLOBAL_USE_GLOBAL</option><option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option></field><fieldname="cache_time"type="number"label="COM_MODULES_FIELD_CACHE_TIME_LABEL"default="0"/><fieldname="cachemode"type="hidden"default="itemid"><option value="itemid"></option></field></fieldset></fields></config></extension>
src/Helper/FaqHelper.php

Code:

<?phpnamespace VPJoomla\Module\Faq\Site\Helper;use Joomla\CMS\Factory;use Joomla\CMS\Component\ComponentHelper;use Joomla\CMS\HTML\HTMLHelper;use Joomla\Database\DatabaseDriver;defined('_JEXEC') or die;class FaqHelper {public static function getArticleUrl(int $id = null){if ($id != null) {$app   = Factory::getApplication();$menu  = $app->getMenu();// Get the database object.$db = Factory::getContainer()->get(DatabaseDriver::class);$query = $db->getQuery(true);$query->select('link');$query->from('#__menu');$query->where($db->quoteName('menutype') . ' = ' . $db->quote($menu) . 'AND' . $db->quoteName('link') . ' LIKE ' . $db->quote('index.php?option=com_content&view=article&id=' . $id . '%') . 'AND' . $db->quoteName('published') . ' = ' . $db->quote(1));$db->setQuery($query);$results = $db->loadObject();if ($results->link) {return $results->link;} else {return false;}} else {return false;}}/** * @param $id * * @return mixed */public static function getFaqItem($id = null){$id = substr(json_encode($id), 1, -1);// Get the database object.$db = Factory::getContainer()->get(DatabaseDriver::class);$query = $db->getQuery(true);$query->select(array('*'));$query->from($db->quoteName('#__faq_item'));$query->where($db->quoteName('id') . ' IN ' . '('. $id .')');$db->setQuery($query);$result = $db->loadObjectList();if($result){return $result;}}}
Maybe I made mistake at code?

Statistics: Posted by zeus07 — Tue Apr 09, 2024 9:29 am



Viewing all articles
Browse latest Browse all 2026

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>