Комментарии

Элементы веб-ссылок в Joomla 2.5
( 0 Голосов )

Список элементов веб-ссылок выводится в элементе tbody разметки тела таблицы в коде HTML. Каждая веб-ссылка является строкой таблицы (элемент разметки tr), а каждый столбец — ячейкой таблицы (элемент разметки td). Как и следовало ожидать, строки таблицы выводятся в теле цикла foreach следующим образом:

<?php foreach ($this->iteras as $i => $item) :

Напомним, что в поле $this->iterns содержится массив элементов, возвращаемых моделью. Сначала над этим элементом производится ряд служебных операций: проверяется его упорядочение, получается ссылка на категорию, проверяются полномочия пользователя на создание новых элементов, редактируются уже имеющиеся элементы, регистрируются элементы и правится их состояние. Затем для данного элемента выводится каждый столбец таблицы.

При компоновке первого столбца таблицы вызывается метод JHtmlGrid:: id () для вывода на экран флажка со значением идентификатора каждого элемента веб-ссылки. В этом методе компонуется флажок с именем cid [ ]. Квадратные скобки после имени флажка указывают на то, что результаты возвращаются из данного метода в виде массива идентификаторов для всех установленных флажков. Некоторые задачи, в том числе публикация, снятие с публикации, архивирование, регистрация, удаление в корзину и удаление, выполняются над элементами массива. При выполнении этих задач из элемента запроса cid [ ] считывается массив.

Следующий столбец таблицы компонуется сложнее. Если элемент снят с регистрации (т.е. заблокирован), пиктограмма замка выводится на экран в следующей строке кода:

<?php echo JHtml::_('jgrid.checkedout', $i, $item->editor, $item->checked out  time, 'weblinks', $canCheckin); ?>

В этой строке кода вызывается метод JHtmlJGrid::checkedout () с индексом текущей строки таблицы, именем лица, снявшего элемент с регистрации, временем снятия с регистрации, префиксом задачи (в данном случае — "weblinks") и логическим значением, обозначающим, разрешено ли пользователю зарегистрировать данный элемент. Напомним, что переменная $canCheckin была установлена в начале цикла f oreach в зависимости от полномочий текущего пользователя на выполнение действия core .manage над компонентом comcheckin, а также от того, является ли он тем же самым пользователем, который снял данный элемент с регистрации. Если пользователю разрешено зарегистрировать элемент, на экран выводится пиктограмма в виде ссылки, инициирующей задачу регистрации элемента с данным идентификатором. В данном случае упомянутый выше метод генерирует следующий код разметки в формате HTML:

<а href="#" onclick="return  listltemTask('cb0',*weblinks.checkin')" title="Checkin::Super User\&lt;br  /&gt;Wednesday, 4>01  June  2011\&lt;br  /&gt;18:15">
<span>
<span>Checked out </span>
</span>
</a>

Пиктограмма, выбираемая из селектора классов CSS типа j grid span. checkedout, представляет собой ссылку, по которой выполняется задача weblinks. checkin для регистрации элемента. Если же пользователю не разрешено зарегистрировать элемент, генерируется следующий код разметки в формате HTML:

<span>title="Checked out::Super User\&lt;br /&gt;Wednesday, 01 June 2011\&lt;br /&gt;18:08">
<span>
<span>Checked out </span>
</span>

Этот код похож на предыдущий, за исключением того, что в нем отсутствует элемент привязки а со ссылкой на задачу. Тем не менее в том же самом столбце таблицы отображается заглавие веб-ссылки. Если пользователю разрешено редактировать веб-ссылку, ее заглавие будет отображено в виде ссылки на соответствующий элемент, а иначе — в текстовом виде. И наконец, отображается псевдоним элемента.

В столбце состояния указывается, был ли данный элемент опубликован. Для отображения соответствующей пиктограммы метод JHtmlJGrid: :published() вызывается из следующей строки кода разметки:

<?php echo JHtml::_('jgrid.published', $item->state, $i, 'weblinks.', 0>$canChange, 'ob', $item->publish_up, $item->publish_down); ?>

В этой строке кода выводится пиктограмма, соответствующая текущему состоянию "опубликовано" данного элемента. Если текущий пользователь имеет полномочия на выполнение действия edit. state, а данный элемент находится в состоянии "опубликовано" или "снято с публикации", то появляется пиктограмма в виде ссылки, позволяющей сменить состояние элемента с "опубликовано" на "снято с публикации" или наоборот. И все это делается в методе JHtmlJGrid:: published ().

В следующем столбце таблицы просто отображается заглавие категории, как показано ниже.

<?php echo $this->escape($item->category_title); ?>

Следует заметить, что заглавие категории обрабатывается при вызове метода $this->escape (). Но в связи с тем, что заглавие категории вводится пользователем, оно может содержать злонамеренный код. В методе escape () удаляются любые символы, которые злоумышленник может ввести, пытаясь внедрить злонамеренный код JavaScript или SQL в компоновку веб-страницы. По умолчанию в подклассах, производных от класса JView, применяется в виде метода escape () функция htmlspecialchars (), встроенная в язык РНР. Но эту функцию можно заменить любым методом, соответственно установив поле $_еscape, например, в конструкторе данного класса.

Вообще говоря, любые строковые данные, вводимые пользователем, рекомендуется экранировать. В данной форме экранируется значение, вводимое для поиска фильтра, заглавие и псевдоним веб-ссылки, заглавие категории, уровень доступа и название языка. Если же вводимое значение не содержит специальные символы, оно остается без изменения.

Далее следует столбец упорядочения. Его компоновка усложняется тем, что в нем поддерживается очень полезное свойство. Так, если список веб-ссылок упорядочен по категориям, то имеется возможность изменить упорядочение отдельных веб-ссылок. Это можно сделать одним из двух способов. Во-первых, для этой цели предоставляются стрелки перемещения веб-ссылки вверх или вниз по списку, а во-вторых, — поле, в котором можно ввести желаемый порядковый номер для одного или более элемента, а затем переупорядочить весь список. Дело усложняется еще и тем, что список веб-ссылок может быть отсортирован по восходящей или нисходящей. Так, если он отсортирован по восходящей, то назначение стрелок, направленных вверх и вниз, изменяется на противоположное.

Ниже приведен код компоновки данного столбца таблицы.

<?php if ($canChange) : ?>
<?php if ($saveOrder) :?>
<?php if ($listDirn == 'asc') : ?>
<span><?php echo  $this->pagination->orderUpIcon($i,->($item->catid ==  @$this->items[$i-l]->catid), 'weblinks.orderup', 'JLIB_HTML_MOVE_UP', $ordering); ?></span>
<span><?php echo $this->pagination->orderDownIcon ($i, 4>$this->pagination->total,    ($item->catid ==  @$this->items[$i+1]->catid), Vweblinks.orderdown', 'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php elseif ($listDirn == 'desc') : ?>
<span><?php echo $this->pagination->orderUpIcon($i, ($item->catid == @$this->items[$i-l]->catid), 'weblinks.orderdown', 'JLIB_HTML_MOVE_UP', $ordering); ?></span>
<span><?php echo $this->pagination->orderDownIcon($i, $this->pagination->total, ($item->catid == @$this->items[$i+l]->catid), 'weblinks.orderup',  'JLIB_HTML_MOVE_DOWN', $ordering); ?></span> <?php endif; ?> <?php endif; ?> <?php $disabled = $saveOrder ? : 'disabled="disabled"'; ?>
<input  type="text"  name="order[]"   size="5"  value="<?php echo $item->ordering;?>" <?php echo $disabled ?> /> <?php else : ?>
<?php echo $item->ordering; ?> <?php endif; ?>

Напомним, что в начале цикла foreach устанавливается переменная $canChange. Если она принимает логическое значение true, значит, текущий пользователь имеет полномочия на выполнение действия edit. state и регистрацию текущей веб-ссылки. Разрешение на регистрацию требуется для того, чтобы во время переупорядочения списка веб-ссылок можно было временно снять отдельные их элементы с регистрации (т.е. заблокировать), а по завершении этой операции — снова зарегистрировать (т.е. разблокировать).

В данном случае первый кодовый блок выполняется во внешнем условном операторе if. Затем проверяется, установлено ли в переменной $saveOrder логическое значение true. Напомним, что это значение было установлено в самом начале рассматриваемого здесь файла компоновки и является истинным, если сортировка происходит по столбцу упорядочения (a.ordering). В таком случае происходит переход к третьему условному оператору if, где выясняется порядок сортировки: по восходящей или по нисходящей. Если сортировка производится по восходящей, то отображается стрелка, направленная вверх (при вызове метода orderUpIcon () из объекта разбиения на страницы) и связываемая с задачей weblinks .orderup. Аналогичным образом отображается стрелка, направленная вниз и связываемая с задачей weblinks. orderdown.

Ситуация оказывается несколько запутанной, если сортировка производится по нисходящей. Ведь в этом случае порядок расположения элементов в списке изменяется на обратный, а направленная вверх стрелка фактически перемещает элемент вниз по списку. Поэтому во избежание недоразумений направленная вверх стрелка связывается с задачей weblinks . orderdown, а направленная вниз стрелка — с задачей weblinks . orderup.

На этом выполнение кодового блока внутреннего условного оператора if завершается. Далее следуют два условных оператора endif, а следовательно, происходит возврат в кодовый блок внешнего условного оператора if, где переменной $disabled присваивается пустая строка, если переменная $saveOrder содержит логическое значение true, в противном случае — строка "disabled='disabled'. (Напомним, что строковые значения можно заключать в одинарные кавычки внутри двойных кавычек, и наоборот.) Эта символьная строка используется для отмены доступа к полю ввода порядка сортировки, если сортировка не производится по столбцу упорядочения. Затем отображается само это поле. Но если переменная $saveOrder не содержит логическое значение true, то поле ввода порядка сортировки окажется недоступным.

Кодовый блок условного оператора else выполняется в том случае, если пользователю не разрешено редактировать данный элемент. И тогда порядок сортировки отображается без стрелок или поля его ввода.

Четыре оставшихся столбца таблицы компонуются очень просто. Они служат лишь для отображения уровня доступа, количества посещений, названия конкретного языка (или метки "All", если доступны все поддерживаемые языки), а также идентификатора элемента.


Понравился материал? Пригодилась информация? Плюсани в социалки!


 
Похожие новости
Добавить комментарий


Защитный код