在模板中使用 Mojolicious 动作作为标题

Use Mojolicious action as title in template

我正在尝试将存储中的默认 "title" 变量设置为操作名称的英文版本。例如:

sub customer_orders {
    ...
}

会有:

title => 'Customer Orders',

可在模板中使用。有谁知道如何做到这一点?谢谢!

您可以通过调用者获取子程序名称:

my $sub_name = (caller(0))[3];.

从您的输出来看,您可能还想将其大写并将 _ 替换为空格

$sub_name =~ s /_/ /g;

我会这样大写: my $title = join(' ', map{ ucfirst lc }split(' ', $sub_name) );

看起来 $c->action 在 Mojolicious 模板中可用 $action。所以你可以这样做:

<title><%= title || action_to_title($action) %>

这样其他模板就可以像这样覆盖标题:

% title 'My Override Title'

如果 title 未设置,您可以添加 action_to_title 助手来准备标题的动作。

您可以将标题放入布局模板中

<!DOCTYPE html>
<html>
  <head>
    <title><%= content 'title' %></title>
    <style>
      label.field-with-error { color: #FF4C4D }
      input.field-with-error { background-color: #FF4C4D }
      .error_msg { color: #FF4C4D }
    </style>
    %= content 'styles';
  </head>
  <body>

%= include 'basic/menu'
%= include 'basic/error_messages'
%= content
%= content_for 'include_js'
</body>
</html>

然后在您的模板中填写 content(另请参阅 content_forcontent_with

% content_with title => "$title_schet за $title_date";
% content_for styles => '<link rel="stylesheet" type="text/css" href="/static/css/report.css">';

<form>
  ...
</form>