CodeIgniter 3 html вспомогательная функция ul, как передать параметры в li’s

Я реализую сайт с CodeIgniter 3, и я использую HTML помощник который прекрасно работает для того, что мне нужно. У меня есть следующие массивы для моего UL

$links = array(
anchor(index_page(),"Home",(uri_string() == "" ? array('class' => 'active') : '')),
anchor("about-us","About Us",(uri_string() == "about-us" ? array('class' => 'active') : '')),
anchor("customers","Customers",(uri_string() == "customers" ? array('class' => 'active') : '')),
anchor("policy","Policy",(uri_string() == "policy" ? array('class' => 'active') : '')),
anchor("contact","Contact",(uri_string() == "contact" ? array('class' => 'active') : ''))
);

$attributes_normal = array(
'id'    => 'main_menu'
);

Итак, после этих массивов я инициализирую свой ul следующим образом:

<?php echo ul($links, $attributes_normal); ?>

Результат выглядит следующим образом (раздел о нас открыт для примера):

<ul id="main_menu">
<li><a href="http://mysitesurl/">Home</a></li>
<li><a href="http://mysitesurl/about-us" class="active">About Us</a></li>
<li><a href="http://mysitesurl/customers">Customers</a></li>
<li><a href="http://mysitesurl/policy">Policy</a></li>
<li><a href="http://mysitesurl/contact">Contact</a></li>
</ul>

Единственный вопрос, который у меня есть, есть ли способ передать условие активной ссылки на <li> элемент. Я использую Zurb Foundation 5 и по умолчанию он добавляет class="active" к <li> элемент, поэтому я хочу использовать CSS по умолчанию.

2

Решение

Не без переопределения по умолчанию _list вспомогательная функция. На линия 145 в исходном коде для HTML Helper вы можете увидеть, что<литий>’жестко запрограммирован и не принимает дополнительных аргументов:

$out .= str_repeat(' ', $depth + 2).'<li>';

Возможно, я бы просто установил активный класс, используя jQuery или JavaScript, но вы также можете переопределить вспомогательные функции по умолчанию для создания списков (см. Расширение помощников).

0

Другие решения

Вы должны создать MY_html_helper.php в пути приложения / помощников

if ( ! function_exists('_list'))
{
/**
* Generates the list
*
* Generates an HTML ordered list from an single or multi-dimensional array.
*
* @param   string
* @param   mixed
* @param   mixed
* @param   int
* @param   string
* @param   string
* @return  string
*/
function _list($type = 'ul', $list = array(), $attributes = '', $depth = 0, $outer = '__outer', $inner = '__inner' )
{
// If an array wasn't submitted there's nothing to do...
if ( ! is_array($list))
{
return $list;
}

// Set the indentation based on the depth
$out = str_repeat(' ', $depth)
// Write the opening list tag
.'<'.$type._stringify_attributes($attributes).">\n";// Cycle through the list elements.  If an array is
// encountered we will recursively call _list()

static $_last_list_item = '';
foreach ($list as $key => $val)
{
$_last_list_item = $key;

if ( $key !== $outer && $key !== $inner) {
$out .= str_repeat(' ', $depth + 2) . '<li ' . (is_array($val) && array_key_exists($outer, $val) ? _stringify_attributes($val[$outer]) : '') . '>';
if (!is_array($val)) {
$out .= $val;
} else {
$out .= $_last_list_item . "\n" . _list($type, $val, (array_key_exists($inner, $val) ? $val[$inner] : ''), $depth + 4) . str_repeat(' ', $depth + 2);
}
$out .= "</li>\n";
}

}

// Set the indentation for the closing tag and apply it
return $out.str_repeat(' ', $depth).'</'.$type.">\n";
}
}

Теперь вы можете использовать конфигурацию netx для функции ul ()

$links = array(
'Access Control' => array(
'Users' => array(
'__outer' => array(
//Here you have the config for 'User' option 'li'
'class' => 'active some-class',
'id' => 'my-unique-id'
)
),
'Roles',
'Permissions',
'__inner' => array(
//Here you have the config for inner ul (sub-menu)
'class' => 'sub-menu'
),
'__outer' => array(
//Here you have the config for 'Access Control' option 'li'
'class' => 'active'
),
),
);

Параметры __inner и __outer не отображаются в списке

0

По вопросам рекламы [email protected]