it-swarm.com.de

Wie kann ich den Zugriffsebenencode für Joomla 3-Benutzergruppen unter der öffentlichen statischen Funktion verwenden?

Derzeit versuche ich, Code auf Gruppenzugriffsebene unter der öffentlichen statischen Funktion zu verwenden. Die Datei gehört zur Komponente des 3. Teils und befindet sich im Administratorordner. Die Komponente des dritten Teils verfügt über eine eigene benutzerdefinierte Dateiverwaltung, und diese Datei enthält Klassen darüber.

Ich habe zwei verschiedene Zugriffsebenen für Frontend-Benutzer. Für die kommerziellen Benutzer habe ich versucht, den folgenden Code hinzuzufügen, aber es funktioniert nicht.

$user = JFactory::getUser();
if ($user->get('Commercial') == 1)  {

Hier ist die vollständige Codepage.

<?php

// Access the file from Joomla environment
defined('_JEXEC') or die('Restricted access');

class JHtmlEditRAuction
{
    /**
     * DisplayFieldsHtml
     *
     * @param        $row
     * @param        $fieldlist
     * @param string $style
     *
     * @return null
     */
    public static function DisplayFieldsHtml(&$row, $fieldlist, $style = 'div')
    {
        if (!count($fieldlist)) return NULL;
        $page = $fieldlist[0]->page;
        $cfg  = CustomFieldsFactory::getConfig();

        $category_filter = array();
        if ($cfg['has_category'][$page]) {
            $db = JFactory::getDBO();
            $db->setQuery("SELECT `fid` FROM `#__" . APP_PREFIX . "_fields_categories` WHERE `cid` = '" . $row->cat . "'");
            $category_filter = $db->loadColumn();
        }
        $flist        = array();
        $field_object = JTable::getInstance('FieldsTable', 'JTheFactory');

        foreach ($fieldlist as $field) {

            if ($field->categoryfilter && !in_array($field->id, $category_filter))
                continue;

            $field_type = CustomFieldsFactory::getFieldType($field->ftype);

            $field_object->bind($field);
            $f        = new stdClass();
            $f->field = clone $field;
            $f->value = $row->{$field->db_name};
            $f->html  = $field_type->getFieldHTML($field_object, $row->{$field->db_name});
            $flist[]  = $f;
        }
        $func = 'DisplayFieldsHtml_' . ucfirst($style);
        $html = self::$func($flist);

        return $html;
    }

    /**
     * DisplayFieldsHtml_Div
     *
     * @param $flist
     *
     * @return null|string
     */
    public static function DisplayFieldsHtml_Div($flist)
    {
        if (!count($flist)) return NULL;
        $html = '<div>';
        foreach ($flist as $f) {
            $tooltip = '';
            if ($f->field->help) $tooltip = JHtml::_('tooltip', $f->field->help, NULL, JUri::root() . 'components/com_rbids/images/tooltip.png');

            $html .= '<div class="auction_edit_field_container ';

            // This is required as helper for 'required' handler in js validator
            if ($f->field->compulsory) {
                $html .= 'required">';
            } else {
                $html .= '">';
            }

// Here is acces level code that I tried to use
$user = JFactory::getUser();
if ($user->get('Commercial') == 1)  
{
if($f->field->css_class == 'commercialclass') 
{       
            $html .= '<div class=" span3 auction_edit_field_label rbids_custom_field">' . JText::_($f->field->name) . '</div>
                <div class=" span9 auction_edit_field_input">' . $f->html . $tooltip;
            if ($f->field->compulsory) {
                $html .= '&nbsp;' . JHtml::image(JUri::root() . 'components/com_rbids/images/requiredfield.gif', 'Required');
            }
            $html .= '</div>
                <div style="clear: both;"></div>
            </div>';

}
}
        }
        $html .= '</div>';
        return $html;
    }
}

Ich erhalte keine Fehler auf der Seite, aber es kommt auch nichts über verwandte Teile auf die Seite.

Um ehrlich zu sein, bin ich kein PHP Experte. Ich habe alles über Stackexchange und Stackoverflow gelernt und versuche immer wieder, hier Antworten zu finden.

Hoffe jemand kann mir dabei helfen.

Danke im Voraus.

Grüße

1
okisan

Es gibt die Methode Joomla\CMS\User\User::getAuthorisedViewLevels(), die ein Array von IDs der Zugriffsebene des Benutzers zurückgibt. Anstatt den Namen oder die ID der Zugriffsebene fest zu codieren, machen Sie sie zu einer Konfigurationsoption in Ihrer Komponente, indem Sie config.xml Ein Feld hinzufügen:

<field
    name="commercialAccessLevel"
    type="accesslevel"
    label="COM_EXAMPLE_CONFIG_COMMERCIAL_ACCESS_LEVEL_LABEL"
    filter="integer"
/>

Rufen Sie es in Ihrem Code ab und führen Sie eine in_array() Prüfung mit der genannten Methode durch:

$commercialAccessLevel = JComponentHelper::getParams('com_example')->get('commercialAccessLevel');
$user = JFactory::getUser();

if (in_array($commercialAccessLevel, $user->getAuthorisedViewLevels()))
{
    // User has commercial access level.
}
1
Sharky