您好我在创建的模块中有这个代码,我在控制器类的函数中输出:
$output ="
<span id="dateofshow"> Date of Show:<select id="showdate" class="js-
showtimes-select Showtimes-select">'
<option value="2017-07-07">Sat, Jul 7</option>
<option value="2017-07-08">Sat, Jul 8</option>
<option value="2017-07-09">Sat, Jul 9</option>
etc...
</select></span>"
return output;
当我输出它自己的页面时它会正确显示但是当我把它变成一个块时它被剥离出来并且看起来像这样:
<span id="dateofshow"> Date of Show: Fri, Jul 7Sat, Jul 8Sun, Jul 9Mon, Jul 10Tue, Jul 11Wed, Jul 12Thu, Jul 13Fri, Jul 14Sat, Jul 15Sun, Jul 16Mon, Jul 17Tue, Jul 18Wed, Jul 19Thu, Jul 20Wed, Jul 26Thu, Jul 27Wed, Aug 2Thu, Aug 3Wed, Aug 9Thu, Aug 10Fri, Aug 25Sat, Aug 26Sun, Aug 27Mon, Aug 28Tue, Aug 29Wed, Aug 30Thu, Aug 31</span>
此代码中的style="display: block;"
标记也以块形式被剥离出来,并且在同一个函数中:
<div id="2017-07-07" class="js-showtimes-date" style="display: block;">
在Drupal 8中这样做的正确方法是什么?
更新:以下是我正在使用的代码,其中包含一些不相关的部分:
tlistingcontroller.php
namespace Drupal\ttimes\Controller;
use Symfony\Component\HttpFoundation\Response;
use Drupal\Core\Access\AccessResult;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Session\AccountInterface;
use \DateTime;
class tlistingsController
{
public function buildtimes(){
$output = "";
xmlpath = \Drupal::service('file_system')->realpath(file_default_scheme() . "://").'/x/'.'siteId.xml';
$schedResult = simplexml_load_file($xmlpath);
$output .= <span id="dofshow"> Date of Show: <select id="showd" class="js-showtimes-select Showtimes-select">';
foreach($schedResult->xpath('//EBDates/EBDate') as $dates){
$dateformat = date_format ( new DateTime($dates->BDate) , 'D, M j');
$output .= '<option value="'. $dates->BDate . '">'. $dateformat . '</option>';
$output .= '</select></span>';
return $output;
}
public function tlistings_page() { //This is what gets called in the .routing.yml file
return array(
'#type' => 'markup',
'#attached' => array(
'library' => array(
'tlisting/global',),),
'#markup' => $this->buildtimes(),
);
}
}
我更新了它,因为我第一次发布它是通过添加一个带有一些css和js的库,所以我可以这样做。函数读取和xml文件然后从中输出数据,部分数据是它提取并放入select和options标签的日期。如何使用选择表单,但使用函数中提取的数据放在当前相同的位置?
答案 0 :(得分:0)
答案 1 :(得分:0)
如果你想保持跨度,你可以使用前缀和后缀:
$options['2017-07-07'] = 'Sat, Jul 7';
$options['2017-07-08'] = 'Sat, Jul 8';
$options['2017-07-09'] = 'Sat, Jul 9';
$form['showdate'] = array(
'#type' => 'select',
'#options' => $options,
'#required' => TRUE,
'#title' => $this->t('Date of Show:'),
'#prefix' => '<span id="dateofshow">',
'#suffix' => '</span>');
据我了解,您必须使用渲染数组上的属性来输出内联样式。
$form['showdate'] = array(
'#type' => 'select',
'#options' => $options,
'#required' => TRUE,
'#title' => $this->t('Date of Show:'),
'#prefix' => '<span id="dateofshow">',
'#suffix' => '</span>',
'#attributes' => array ('style' => 'display: block;'));
我的建议不是要对抗Drupal输出的标记,而是使用它。如果您提供有关您要实现的目标的更多信息,我将很乐意扩展。
<强>更新强> 以下是一些可能会根据您的更新帮助您的代码。我没有测试过这个。
$xmlpath = \Drupal::service('file_system')->realpath(file_default_scheme() . "://").'/x/'.'siteId.xml';
$schedResult = simplexml_load_file($xmlpath);
$options = array();
foreach($schedResult->xpath('//EBDates/EBDate') as $dates)
{
$options[$dates->BDate] = date_format ( new DateTime($dates->BDate) , 'D, M j');
}
$form['showdate'] = array(
'#type' => 'select',
'#options' => $options,
'#required' => TRUE,
'#title' => $this->t('Date of Show:'),
'#attributes' => array (
'class' => array(
'js-showtimes-select',
'Showtimes-select')));