Как я могу назначить класс для <th>, созданного QDataGrid в qcodo/qcubed?
Я пытаюсь добавить класс к тегу, чтобы я мог контролировать его атрибуты, особенно ширину.
Вот как выглядит сгенерированный HTML с пустым классом.
http://img651.imageshack.us/img651/7121/screenshot211201054338p.png http://img515.imageshack.us/img515/1553/screenshot211201055524p.png
Как вы можете видеть, есть несколько тегов, которые я бы хотел назначить классу, чтобы я мог выполнять стилизацию из внешнего файла CSS, а не делать это в контроллере, как это делается ниже. Благодарю.
// Add Target Data Grid
$this->dtgTargets = new QDataGrid($this);
$this->dtgTargets->CellPadding = 5;
$this->dtgTargets->CellSpacing = 5;
$this->dtgTargets->UseAjax = true;
$this->dtgTargets->AddColumn(new QDataGridColumn("Del", '<?= $_FORM->DeleteButton_Render($_ITEM) ?>', 'Width=10', 'HtmlEntities=false')); //add TF 11-27-08
$this->dtgTargets->AddColumn(new QDataGridColumn('Target Account','<a href="/account_detail.php?aid=<?= str_replace(" ","_",$_ITEM->Account->Id); ?>"><?= $_ITEM->Account->Name ?></a>','HtmlEntities=false',array('OrderByClause' => QQ::OrderBy(QQN::Target()->Account->Name), 'ReverseOrderByClause' => QQ::OrderBy(QQN::Target()->Account->Name,false))));
$this->dtgTargets->GetColumn(0)->Width = '200px';
$this->dtgTargets->SortColumnIndex = 0;
1 ответ
Я никогда не использовал это, но я думаю, что это возможно. Из QDataGridBase.class.php:
protected function GetHeaderRowHtml() {
$objHeaderStyle = $this->objRowStyle->ApplyOverride($this->objHeaderRowStyle);
$strToReturn = sprintf(" <tr %s>\r\n", $objHeaderStyle->GetAttributes());
$intColumnIndex = 0;
if ($this->objColumnArray) foreach ($this->objColumnArray as $objColumn) {
if ($objColumn->OrderByClause) {
// This Column is Sortable
if ($intColumnIndex == $this->intSortColumnIndex)
$strName = $this->GetHeaderSortedHtml($objColumn);
else
$strName = $objColumn->Name;
$this->strActionParameter = $intColumnIndex;
$strToReturn .= sprintf(" <th %s><a href=\"%s\" %s%s>%s</a></th>\r\n",
$this->objHeaderRowStyle->GetAttributes(),
QApplication::$RequestUri,
$this->GetActionAttributes(),
$this->objHeaderLinkStyle->GetAttributes(),
$strName);
} else
$strToReturn .= sprintf(" <th %s>%s</th>\r\n", $this->objHeaderRowStyle->GetAttributes(), $objColumn->Name);
$intColumnIndex++;
}
$strToReturn .= " </tr>\r\n";
return $strToReturn;
}
Атрибуты устанавливаются с помощью этого метода:
$this->objHeaderRowStyle->GetAttributes()
GetAttributes реализован в QBaseClass, базовом классе для всех классов в системе.
Если вы попробуете $colMyColumn->CssClass = 'class_name'; Вы устанавливаете только класс td:-(
После изучения кода я вижу QDataGridBase.class.php, когда тег th создается, стиль берется из объекта RowStyle, который описывает строку, то есть тег td. Я предполагаю, что это ошибка, и QDataGrid не завершена.
Или вы просто используете HTML-таблицу в своем представлении, или вам нужно улучшить QDataGrid.
ОБНОВИТЬ:
Это способ сделать это:
$objThStyle = new QDataGridRowStyle();
$objThStyle->CssClass = 'custom-th';
$this->dtgArticle->HeaderRowStyle = $objThStyle;
Но это не идеал, так как он применяется ко всем тэгам. QDataGridRowStyle должен быть установлен в объекте столбца, а не в сетке данных.
Это яркий пример того, почему мне не нравится, как Qcodo отображает HTML, CSS и JavaScript. Все является объектом, который должен быть установлен в контроллере. По мнению вы можете сделать очень мало. Представьте себе, насколько просто было бы установить класс в вашем представлении следующим образом:
<th>Column 1</th>
<th>Column 2</th>
<th>Column 3</th>
<th>...</th>