Здравствуйте всем!
Может мне кто-то подсказать каким образом я могу создать программно страницу?)
Есть несколько стандартных страниц , которые созданы посредством друпал.
Как сделать, чтобы, чтобы по кнопке создалась и сохранилась страница, в которую загрузится содержание от имеющихся определенных страниц (нод).
Комментарии
Скорей всего вам нужно искать на Ютюбе видики по Views. Для D8 подойдут. Да и для D7 не особо отличаются.
из модуля, хочу программно сделать, без вьюса
Ищите инфу по drupal 8, типа create node programmatically
Можно, например, так:
<?php // Create a "Llama" node.
$node = Node::create(['type' => 'page']);
$node->setTitle('Llama')
->setOwnerId(1)
->setPublished()
->setCreatedTime(123456789)
->setChangedTime(123456789)
->setRevisionCreationTime(123456789)
->set('path', '/llama')
->save(); ?>
В тестах валом примеров.
извините, только учусь.. как этот код обработать кнопкой? Добавила в функцию в модуль, но ничего не произошло
Сначала нужно сделать саму форму, а затем в её сабмите реализовать код, пример, которого дан
форму создала но как повесить это на клик не поняла
используйте submitForm()
это само-собой, но что-то не работает у меня, должна ли я что-то еще подключить в модуле кроме, как -
use Drupal\node\Entity\Node;
и как правильно указать - path?
код - это просто пример...
По идее и так будет работать:
$node = Node::create(['type' => 'page', 'title' => 'Test']);
$node->save();
Node конечно должны подключить
да.. а так работает) Благодарю
А с определением текущего пользователя, можете что-то подсказать? Что-то опять непонятки.., вроде правильно выглядит, а не хочет работать
$userCurrent = \Drupal::currentUser();
$user_uid = \Drupal\user\Entity\User::load($userCurrent->id());
$name_user_uid = $user_uid->getUsername();
Вы используете xdebug? Если нет - очень рекомендую.
Что приходит в $userCurrent у вас?
установлю xdebug и проверю, сейчас вижу в логах такую ошибку -
такой код писать без xdebug - попросту тратить огромное количество времени на всякого рода гадания
На первый взгляд, уведомление указывает на то, что по какой-то причине свойство uid сеанса UserSession на самом деле является объектом User, а не целым числом.
Если бы вы поставили xdebug или хотя бы девелом вывели, то сразу бы поняли что возвращает $userCurrent и не было бы этих "гаданий на кофейной гуще"
Соорудилась у меня вот такая конструкция - рабочая
namespace Drupal\num\Form;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Ajax\HtmlCommand;
use Drupal\Core\Session\AccountInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Implementing a numerology calculator form.
*/
class TestForm extends FormBase {
/**
* @var AccountInterface $account
*/
protected $account;
/**
* Class constructor.
*/
public function __construct(AccountInterface $account) {
$this->account = $account;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
// Instantiates this form class.
return new static(
// Load the service required to construct this class.
$container->get('current_user')
);
}
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'test_form';
}
/**
* {@inheritdoc}.
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$form['actions']['submit'] = [
'#id' => 'button',
'#type' => 'submit',
'#value' => $this->t('Определить'),
'#ajax' => [
'callback' => '::getID',
],
];
$form['message'] = [
'#type' => 'markup',
'#markup' => '<div class="result"></div>',
];
return $form;
}
public function getID(array $form, FormStateInterface $form_state) {
$uid = $this->account->id();
$response = new AjaxResponse();
$response->addCommand(
new HtmlCommand(
'.result',
'<div class="my_mess_notlink">' .'UID - Пользователя' . $uid . '</div>'
),);
return $response;
}
/**
* Submitting the form.
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
}
}
Зачем загружаете уже загруженный сервис current_user?
у меня по другому не работает.. не знаю почему, может быть к моему модулю библиотечки надо какие-то подключить
Что не работает?
Тот метод, который вам нужен уже доступен в классе! А вы дополнительно загружаете сервис.
а можно уточнить, что именно нужно убрать из этой конструкции))
Здесь вам не нужен конструктор и create, т.к. метод currentUser() уже доступен в объекте.
в том то и дело, что без этого не работает..
должно работать, значит что-то не то делаете...