Как я могу назначить класс <th>, созданный QDataGrid в qcodo / qcubed? - PullRequest
1 голос
/ 12 февраля 2010

Я пытаюсь добавить класс в тег, чтобы я мог контролировать его атрибуты, особенно ширину.

Вот как выглядит сгенерированный 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 Ответ

1 голос
/ 15 февраля 2010

Я никогда не использовал его, но я думаю, что это возможно. Из 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.

UPDATE:

Это способ сделать это:

        $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>
...