本文整理汇总了PHP中Drupal\views\Entity\View::create方法的典型用法代码示例。如果您正苦于以下问题:PHP View::create方法的具体用法?PHP View::create怎么用?PHP View::create使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Drupal\views\Entity\View
的用法示例。
在下文中一共展示了View::create方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: testUsername
/**
* Test the username formatter.
*/
public function testUsername()
{
$view_id = $this->randomMachineName();
$view = View::create(['id' => $view_id, 'base_table' => 'comment_field_data', 'display' => ['default' => ['display_plugin' => 'default', 'id' => 'default', 'display_options' => ['fields' => ['name' => ['table' => 'comment_field_data', 'field' => 'name', 'id' => 'name', 'plugin_id' => 'field', 'type' => 'comment_username'], 'subject' => ['table' => 'comment_field_data', 'field' => 'subject', 'id' => 'subject', 'plugin_id' => 'field', 'type' => 'string', 'settings' => ['link_to_entity' => TRUE]]]]]]]);
$view->save();
/* @var \Drupal\Core\Session\AccountSwitcherInterface $account_switcher */
$account_switcher = \Drupal::service('account_switcher');
/* @var \Drupal\Core\Render\RendererInterface $renderer */
$renderer = \Drupal::service('renderer');
$account_switcher->switchTo($this->adminUser);
$executable = Views::getView($view_id);
$build = $executable->preview();
$this->setRawContent($renderer->renderRoot($build));
$this->verbose($this->getRawContent());
$this->assertLink('My comment title');
$this->assertLink('Anonymous comment title');
$this->assertLink($this->adminUser->label());
$this->assertLink('barry (not verified)');
$account_switcher->switchTo(new AnonymousUserSession());
$executable = Views::getView($view_id);
$executable->storage->invalidateCaches();
$build = $executable->preview();
$this->setRawContent($renderer->renderRoot($build));
// No access to user-profiles, so shouldn't be able to see links.
$this->assertNoLink($this->adminUser->label());
// Note: External users aren't pointing to drupal user profiles.
$this->assertLink('barry (not verified)');
$this->verbose($this->getRawContent());
$this->assertLink('My comment title');
$this->assertLink('Anonymous comment title');
}
示例2: assertFieldAccess
/**
* Checks views field access for a given entity type and field name.
*
* To use this method, set up an entity of type $entity_type_id, with field
* $field_name. Create an entity instance that contains content $field_content
* in that field.
*
* This method will check that a user with permission can see the content in a
* view, and a user without access permission on that field cannot.
*
* @param string $entity_type_id
* The entity type ID.
* @param string $field_name
* The field name.
* @param string $field_content
* The expected field content.
*/
protected function assertFieldAccess($entity_type_id, $field_name, $field_content)
{
\Drupal::state()->set('views_field_access_test-field', $field_name);
$entity_type = \Drupal::entityManager()->getDefinition($entity_type_id);
$view_id = $this->randomMachineName();
$data_table = $entity_type->getDataTable();
// Use the data table as long as the field is not 'uuid'. This is the only
// column that can only be obtained from the base table.
$base_table = $data_table && $field_name !== 'uuid' ? $data_table : $entity_type->getBaseTable();
$entity = View::create(['id' => $view_id, 'base_table' => $base_table, 'display' => ['default' => ['display_plugin' => 'default', 'id' => 'default', 'display_options' => ['fields' => [$field_name => ['table' => $base_table, 'field' => $field_name, 'id' => $field_name, 'plugin_id' => 'field']]]]]]);
$entity->save();
/** @var \Drupal\Core\Session\AccountSwitcherInterface $account_switcher */
$account_switcher = \Drupal::service('account_switcher');
/** @var \Drupal\Core\Render\RendererInterface $renderer */
$renderer = \Drupal::service('renderer');
$account_switcher->switchTo($this->userWithAccess);
$executable = Views::getView($view_id);
$build = $executable->preview();
$this->setRawContent($renderer->renderRoot($build));
$this->assertText($field_content);
$this->assertTrue(isset($executable->field[$field_name]));
$account_switcher->switchTo($this->userWithoutAccess);
$executable = Views::getView($view_id);
$build = $executable->preview();
$this->setRawContent($renderer->renderRoot($build));
$this->assertNoText($field_content);
$this->assertFalse(isset($executable->field[$field_name]));
\Drupal::state()->delete('views_field_access_test-field');
}
示例3: doViewTest
/**
* Tests XSS coming from View block labels.
*/
protected function doViewTest()
{
$view = View::create(['id' => $this->randomMachineName(), 'label' => '<script>alert("view");</script>']);
$view->addDisplay('block');
$view->save();
$this->drupalGet(Url::fromRoute('block.admin_display'));
$this->clickLink('<script>alert("view");</script>');
$this->assertRaw('<script>alert("view");</script>');
$this->assertNoRaw('<script>alert("view");</script>');
}
示例4: createView
/**
* {@inheritdoc}
*/
public function createView($options = NULL)
{
if ($view_template = $this->loadTemplate($options)) {
$view_template['id'] = $options['id'];
$view_template['label'] = $options['label'];
$view_template['description'] = $options['description'];
return View::create($view_template);
}
return NULL;
}
示例5: doViewTest
/**
* Tests XSS coming from View block labels.
*/
protected function doViewTest()
{
$view = View::create(['id' => $this->randomMachineName(), 'label' => '<script>alert("view");</script>']);
$view->addDisplay('block');
$view->save();
$this->drupalGet(Url::fromRoute('block.admin_display'));
$this->clickLinkPartialName('Place block');
// The block admin label is automatically XSS admin filtered.
$this->assertRaw('alert("view");');
$this->assertNoRaw('<script>alert("view");</script>');
}
示例6: testHandlers
/**
* Tests most of the handlers.
*/
public function testHandlers()
{
$this->drupalCreateContentType(array('type' => 'article'));
$this->addDefaultCommentField('node', 'article');
$object_types = array_keys(ViewExecutable::getHandlerTypes());
foreach ($this->container->get('views.views_data')->get() as $base_table => $info) {
if (!isset($info['table']['base'])) {
continue;
}
$view = View::create(array('base_table' => $base_table));
$view = $view->getExecutable();
// @todo The groupwise relationship is currently broken.
$exclude[] = 'taxonomy_term_field_data:tid_representative';
$exclude[] = 'users_field_data:uid_representative';
// Go through all fields and there through all handler types.
foreach ($info as $field => $field_info) {
// Table is a reserved key for the metainformation.
if ($field != 'table' && !in_array("{$base_table}:{$field}", $exclude)) {
$item = array('table' => $base_table, 'field' => $field);
foreach ($object_types as $type) {
if (isset($field_info[$type]['id'])) {
$options = array();
if ($type == 'filter') {
$handler = $this->container->get("plugin.manager.views.{$type}")->getHandler($item);
// Set the value to use for the filter based on the filter type.
if ($handler instanceof InOperator) {
$options['value'] = array(1);
} else {
$options['value'] = 1;
}
}
$view->addHandler('default', $type, $base_table, $field, $options);
}
}
}
}
// Go through each step individually to see whether some parts are
// failing.
$view->build();
$view->preExecute();
$view->execute();
$view->render();
// Make sure all handlers extend the HandlerBase.
foreach ($object_types as $type) {
if (isset($view->{$type})) {
foreach ($view->{$type} as $handler) {
$this->assertTrue($handler instanceof HandlerBase, format_string('@type handler of class %class is an instance of HandlerBase', array('@type' => $type, '%class' => get_class($handler))));
}
}
}
}
}
示例7: testViewsListLimit
/**
* Tests that the views list does not use a pager.
*/
public function testViewsListLimit()
{
// Check if we can access the main views admin page.
$this->drupalGet('admin/structure/views');
$this->assertResponse(200);
$this->assertLink(t('Add view'));
// Count default views to be subtracted from the limit.
$views = count(Views::getEnabledViews());
// Create multiples views.
$limit = 51;
$values = $this->config('views.view.test_view_storage')->get();
for ($i = 1; $i <= $limit - $views; $i++) {
$values['id'] = 'test_view_storage_new' . $i;
unset($values['uuid']);
$created = View::create($values);
$created->save();
}
$this->drupalGet('admin/structure/views');
// Check that all the rows are listed.
$this->assertEqual(count($this->xpath('//tbody/tr[contains(@class,"views-ui-list-enabled")]')), $limit);
}
示例8: testViewsUiAutocompleteTag
/**
* Tests the views_ui_autocomplete_tag function.
*/
public function testViewsUiAutocompleteTag()
{
\Drupal::moduleHandler()->loadInclude('views_ui', 'inc', 'admin');
// Save 15 views with a tag.
$tags = array();
for ($i = 0; $i < 16; $i++) {
$suffix = $i % 2 ? 'odd' : 'even';
$tag = 'autocomplete_tag_test_' . $suffix . $this->randomMachineName();
$tags[] = $tag;
View::create(array('tag' => $tag, 'id' => $this->randomMachineName()))->save();
}
// Make sure just ten results are returns.
$controller = ViewsUIController::create($this->container);
$request = $this->container->get('request_stack')->getCurrentRequest();
$request->query->set('q', 'autocomplete_tag_test');
$result = $controller->autocompleteTag($request);
$matches = (array) json_decode($result->getContent(), TRUE);
$this->assertEqual(count($matches), 10, 'Make sure the maximum amount of tag results is 10.');
// Make sure the returned array has the proper format.
$suggestions = array_map(function ($tag) {
return array('value' => $tag, 'label' => Html::escape($tag));
}, $tags);
foreach ($matches as $match) {
$this->assertTrue(in_array($match, $suggestions), 'Make sure the returned array has the proper format.');
}
// Make sure that matching by a certain prefix works.
$request->query->set('q', 'autocomplete_tag_test_even');
$result = $controller->autocompleteTag($request);
$matches = (array) json_decode($result->getContent(), TRUE);
$this->assertEqual(count($matches), 8, 'Make sure that only a subset is returned.');
foreach ($matches as $tag) {
$this->assertTrue(array_search($tag['value'], $tags) !== FALSE, format_string('Make sure the returned tag @tag actually exists.', array('@tag' => $tag['value'])));
}
// Make sure an invalid result doesn't return anything.
$request->query->set('q', $this->randomMachineName());
$result = $controller->autocompleteTag($request);
$matches = (array) json_decode($result->getContent());
$this->assertEqual(count($matches), 0, "Make sure an invalid tag doesn't return anything.");
}
示例9: testRelationshipUI
/**
* Tests the relationship ui for field/filter/argument/relationship.
*/
public function testRelationshipUI()
{
$views_admin = $this->drupalCreateUser(array('administer views'));
$this->drupalLogin($views_admin);
// Make sure the link to the field options exists.
$handler_options_path = 'admin/structure/views/nojs/handler/test_handler_relationships/default/field/title';
$view_edit_path = 'admin/structure/views/view/test_handler_relationships/edit';
$this->drupalGet($view_edit_path);
$this->assertLinkByHref($handler_options_path);
// The test view has a relationship to node_revision so the field should
// show a relationship selection.
$this->drupalGet($handler_options_path);
$relationship_name = 'options[relationship]';
$this->assertFieldByName($relationship_name);
// Check for available options.
$xpath = $this->constructFieldXpath('name', $relationship_name);
$fields = $this->xpath($xpath);
$options = array();
foreach ($fields as $field) {
$items = $this->getAllOptions($field);
foreach ($items as $item) {
$options[] = $item->attributes()->value;
}
}
$expected_options = array('none', 'nid');
$this->assertEqual($options, $expected_options);
// Remove the relationship and make sure no relationship option appears.
$this->drupalPostForm('admin/structure/views/nojs/handler/test_handler_relationships/default/relationship/nid', array(), t('Remove'));
$this->drupalGet($handler_options_path);
$this->assertNoFieldByName($relationship_name, NULL, 'Make sure that no relationship option is available');
// Create a view of comments with node relationship.
View::create(['base_table' => 'comment_field_data', 'id' => 'test_get_entity_type'])->save();
$this->drupalPostForm('admin/structure/views/nojs/add-handler/test_get_entity_type/default/relationship', ['name[comment_field_data.node]' => 'comment_field_data.node'], t('Add and configure relationships'));
$this->drupalPostForm(NULL, [], t('Apply'));
// Add a content type filter.
$this->drupalPostForm('admin/structure/views/nojs/add-handler/test_get_entity_type/default/filter', ['name[node_field_data.type]' => 'node_field_data.type'], t('Add and configure filter criteria'));
$this->assertOptionSelected('edit-options-relationship', 'node');
$this->drupalPostForm(NULL, ['options[value][page]' => 'page'], t('Apply'));
// Check content type filter options.
$this->drupalGet('admin/structure/views/nojs/handler/test_get_entity_type/default/filter/type');
$this->assertOptionSelected('edit-options-relationship', 'node');
$this->assertFieldChecked('edit-options-value-page');
}
示例10: create
/**
* {@inheritdoc}
*/
public static function create(array $values = array())
{
return View::create($values);
}
示例11: testReadMore
/**
* Tests the readmore functionality.
*/
public function testReadMore()
{
/** @var \Drupal\Core\Render\RendererInterface $renderer */
$renderer = $this->container->get('renderer');
if (!isset($this->options['validate']['type'])) {
return;
}
$expected_more_text = 'custom more text';
$view = Views::getView('test_display_more');
$this->executeView($view);
$output = $view->preview();
$output = $renderer->renderRoot($output);
$this->setRawContent($output);
$result = $this->xpath('//a[@class=:class]', array(':class' => 'more-link'));
$this->assertEqual($result[0]->attributes()->href, \Drupal::url('view.test_display_more.page_1'), 'The right more link is shown.');
$this->assertEqual(trim($result[0][0]), $expected_more_text, 'The right link text is shown.');
// Test the renderMoreLink method directly. This could be directly unit
// tested.
$more_link = $view->display_handler->renderMoreLink();
$more_link = $renderer->renderRoot($more_link);
$this->setRawContent($more_link);
$result = $this->xpath('//a[@class=:class]', array(':class' => 'more-link'));
$this->assertEqual($result[0]->attributes()->href, \Drupal::url('view.test_display_more.page_1'), 'The right more link is shown.');
$this->assertEqual(trim($result[0][0]), $expected_more_text, 'The right link text is shown.');
// Test the useMoreText method directly. This could be directly unit
// tested.
$more_text = $view->display_handler->useMoreText();
$this->assertEqual($more_text, $expected_more_text, 'The right more text is chosen.');
$view = Views::getView('test_display_more');
$view->setDisplay();
$view->display_handler->setOption('use_more', 0);
$this->executeView($view);
$output = $view->preview();
$output = $renderer->renderRoot($output);
$this->setRawContent($output);
$result = $this->xpath('//a[@class=:class]', array(':class' => 'more-link'));
$this->assertTrue(empty($result), 'The more link is not shown.');
$view = Views::getView('test_display_more');
$view->setDisplay();
$view->display_handler->setOption('use_more', 0);
$view->display_handler->setOption('use_more_always', 0);
$view->display_handler->setOption('pager', array('type' => 'some', 'options' => array('items_per_page' => 1, 'offset' => 0)));
$this->executeView($view);
$output = $view->preview();
$output = $renderer->renderRoot($output);
$this->setRawContent($output);
$result = $this->xpath('//a[@class=:class]', array(':class' => 'more-link'));
$this->assertTrue(empty($result), 'The more link is not shown when view has more records.');
// Test the default value of use_more_always.
$view = View::create()->getExecutable();
$this->assertTrue($view->getDisplay()->getOption('use_more_always'), 'Always display the more link by default.');
}
示例12: instantiateView
/**
* Instantiates a view object from form values.
*
* @return \Drupal\views_ui\ViewUI
* The instantiated view UI object.
*/
protected function instantiateView($form, FormStateInterface $form_state)
{
// Build the basic view properties and create the view.
$values = array('id' => $form_state->getValue('id'), 'label' => $form_state->getValue('label'), 'description' => $form_state->getValue('description'), 'base_table' => $this->base_table, 'langcode' => \Drupal::languageManager()->getDefaultLanguage()->getId());
$view = View::create($values);
// Build all display options for this view.
$display_options = $this->buildDisplayOptions($form, $form_state);
// Allow the fully built options to be altered. This happens before adding
// the options to the view, so that once they are eventually added we will
// be able to get all the overrides correct.
$this->alterDisplayOptions($display_options, $form, $form_state);
$this->addDisplays($view, $display_options, $form, $form_state);
return new ViewUI($view);
}
示例13: getTemporaryView
/**
* Helper function to create a pseudo view.
*
* We use this to obtain our subquery SQL.
*/
protected function getTemporaryView()
{
$view = View::create(array('base_table' => $this->definition['base']));
$view->addDisplay('default');
return $view->getExecutable();
}
示例14: testValidateNestedLoops
/**
* Tests that nested loops of the display handlers won't break validation.
*/
public function testValidateNestedLoops()
{
$view = View::create(['id' => 'test_validate_nested_loops']);
$executable = $view->getExecutable();
$executable->newDisplay('display_test');
$executable->newDisplay('display_test');
$errors = $executable->validate();
$total_error_count = array_reduce($errors, function ($carry, $item) {
$carry += count($item);
return $carry;
});
// Assert that there were 9 total errors across 3 displays.
$this->assertIdentical(9, $total_error_count);
$this->assertIdentical(3, count($errors));
}
示例15: createView
/**
* {@inheritdoc}
*/
public function createView($options = NULL)
{
$view_values = ['id' => $options['id'], 'label' => $options['label'], 'description' => $options['description'], 'base_table' => $this->getBaseTable()];
return View::create($view_values);
}