【问题标题】:Checkbox on Kohana form in gallery3 softwaregallery3 软件中 Kohana 表单上的复选框
【发布时间】:2011-06-13 07:05:00
【问题描述】:

我正在使用gallery3 php 软件,它基于kohana 框架。有人知道如何在专辑信息表单中添加复选框吗?

我试过这样:

静态函数 get_edit_form($parent) { $form = 新锻造( "专辑/更新/{$parent->id}", "", "post", array("id" => "g-edit-album-form")); $form->hidden("from_id")->value($parent->id); $group = $form->group("edit_item")->label(t("编辑相册"));

$group->input("title")->label(t("Title"))->value($parent->title)
    ->error_messages("required", t("You must provide a title"))
  ->error_messages("length", t("Your title is too long"));
$group->textarea("description")->label(t("Description"))->value($parent->description);
/* MPK: information fields for albums */
$group->textarea("information")->label(t("Information text"))->value($parent->information);
$group->checkbox("info")->label(t("Informational"))->value($parent->info);
if ($parent->id != 1) {
  $group->input("name")->label(t("Directory Name"))->value($parent->name)
    ->error_messages("conflict", t("There is already a movie, photo or album with this name"))
    ->error_messages("no_slashes", t("The directory name can't contain a \"/\""))
    ->error_messages("no_trailing_period", t("The directory name can't end in \".\""))
    ->error_messages("required", t("You must provide a directory name"))
    ->error_messages("length", t("Your directory name is too long"));
  $group->input("slug")->label(t("Internet Address"))->value($parent->slug)
    ->error_messages(
      "conflict", t("There is already a movie, photo or album with this internet address"))
    ->error_messages(
      "not_url_safe",
      t("The internet address should contain only letters, numbers, hyphens and underscores"))
    ->error_messages("required", t("You must provide an internet address"))
    ->error_messages("length", t("Your internet address is too long"));
} else {
  $group->hidden("name")->value($parent->name);
  $group->hidden("slug")->value($parent->slug);
}

公共功能更新($album_id){ 访问::verify_csrf(); $album = ORM::factory("item", $album_id); access::required("view", $album); access::required("edit", $album);

$form = album::get_edit_form($album);
try {
  $valid = $form->validate();
  $album->title = $form->edit_item->title->value;
  $album->description = $form->edit_item->description->value;
  /* MPK: information fields for albums */
  $album->information = $form->edit_item->information->value;
  $album->info = $form->edit_item->info->value;
  $album->sort_column = $form->edit_item->sort_order->column->value;
  $album->sort_order = $form->edit_item->sort_order->direction->value;
  if (array_key_exists("name", $form->edit_item->inputs)) {
    $album->name = $form->edit_item->inputs["name"]->value;
  }
  $album->slug = $form->edit_item->slug->value;
  $album->validate();
} catch (ORM_Validation_Exception $e) {
  // Translate ORM validation errors into form error messages
  foreach ($e->validation->errors() as $key => $error) {
    $form->edit_item->inputs[$key]->add_error($error, 1);
  }
  $valid = false;
}

if ($valid) {
  $album->save();
  module::event("item_edit_form_completed", $album, $form);

  log::success("content", "Updated album", "<a href=\"albums/$album->id\">view</a>");
  message::success(t("Saved album %album_title",
                     array("album_title" => html::purify($album->title))));

  if ($form->from_id->value == $album->id) {
    // Use the new url; it might have changed.
    json::reply(array("result" => "success", "location" => $album->url()));
  } else {
    // Stay on the same page
    json::reply(array("result" => "success"));
  }
} else {
  json::reply(array("result" => "error", "html" => (string)$form));
}

}

该字段确实显示在表单上,​​但该字段值不会保存到数据库中。在数据库中它是一个 tinyint(1)。

【问题讨论】:

  • 您可能希望在问题的开头修正代码格式。

标签: php forms checkbox kohana gallery


【解决方案1】:

Kohana 使用模型将数据保存在数据库中。因为$album-&gt;save();,您应该在应用程序的某个地方有一个模型,具体取决于 Kohana 的版本。

转到/modules/gallery/models。有一个名为item.php 的文件。这是应用程序用来保存/加载/创建项目(以及相册)的模型。在第 447 行,有一个命令将专辑的内容实际保存在数据库中。您需要更改该行以保存复选框的值。

【讨论】:

  • 我正在使用最新版本的 gallery3。在 item.php 中没有提到字段名称。有一个过程遍历字段列表并保存它们。控制器albums.php 中提到了字段名称。我已经添加了我自己的字段。所有其他字段保存良好,只有复选框值没有保存。
【解决方案2】:

解决了。问题是您必须使用复选框的“已选中”字段,而不是赋值中的值字段。

在相册.php 中

$group->checkbox("info")->label(t("Informational"))->value($parent->info)->checked($parent->info);

在相册.php 中:

$album->info = $form->edit_item->info->checked;

DB中的字段也叫'info',可以是位。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-26
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多