跳转到主要内容
qingkong 提交于 4 February 2015

5.3 主题设置(3)选项说明 Theme setting(III)-- custom theme setting 

自定义主题设置选项的方法是在主题文件夹下创建theme-setting.php文件,并添加以下代码:

<?php

function themename_form_system_theme_settings_alter(&$form, &$form_state) {

  $form['theme_settings']['your_option'] = array(

    '#type' => 'checkbox',

    '#title' => t('Your Option'),

    '#default_value' => theme_get_setting('your_option'),

  );

}

 

-['theme_settings'] 是用来为选项分组的,一般可以省略。但是如果不省略,你就能把自定义的主题选项和已有的默认选项遍在一个组中。

-[‘your_option'] 是新选项的名称

-#type 是表单类型

-#title  是选项标题/标签

-#default_value  默认值

在这里我们将 #default_value设置为 theme_get_setting(‘your_option’),这样Drupal会在数据库中查找并使用它,但是当它找不到的时候,drupal就会到.info文件中去寻找(注意,请深入理解drupal主题系统的这种行为,前辈们称其为“覆写”,外国人叫它“override”,当你理解之后,你会发现它几乎无处不在)。所以你还需要在.info文件中加入其默认值:

settings[your_option] = 1

最后你可以用theme_get_setting(‘your_option’);语句在你的tpl.php文件中来访问这个选项。

具体示例如下:当然你也可以在官网https://www.drupal.org/node/177868 找到类似的例子。

在主题设置中添加一个副标题(sub-heading),用于在每个页面中显示出来:

 

我们知道,每个网站都有一个标题,假设某个网站除了原始标题之外,还需要一个副标题,并且允许管理员在网站后台进行设置,怎么实现?

 

 第一步,创建theme-setting.php文件并添加以下内容:

<?php

/**

 * Implements hook_form_FORM_ID_alter().

 */

function yourthemename_form_system_theme_settings_alter(&$form, &$form_state) {

//system_theme_settings是数据库中表的名称

//yourthemename是主题名称

  $form['yourthemename_subheading'] = array(

    '#type' => 'textfield',

    '#title' => t('Sub-heading'),

    '#default_value' => theme_get_setting('yourthemename_subheading'),

    '#description' => t('Displays a sub-heading below the main title. Different from the "slogan" because it will display on every page.'),

    '#weight' => -2,

  );

}

 

第二步:在.info文件中为它添加一个默认值,并清除缓存:

 

settings[yourthemename_subheading] = This is a default.

 

第三步:在page.tpl.php文件中引入对应的语句:

<?php if (theme_get_setting('yourthemename_subheading')): ?>
    <h2><?php print theme_get_setting('yourthemename_subheading'); ?></h2>
<?php endif; ?>

 

Drupal 版本