Я вставляю переменную с именем "creditCheck" в шаблон веточки с именем node - course.html.twig
Я начинаю в классе с именем FormaRegis который расширяет абстрактный класс с именем FormaEntity
Это функция:
namespace Drupal\docebo_login;
use Drupal\docebo_login\FormaEntity;
class FormaRegis extends FormaEntity {
.
.
.
public function completionCheck() {
$check = false;
if (parent::accessCheck()) {
$sql = "SELECT count(*) as count FROM learning_courseuser
WHERE DATE_FORMAT(CURDATE(),'%d/%m/%Y') = DATE_FORMAT(date_complete,'%d/%m/%Y')
AND idUser = " . $_SESSION['public_area_idst'];
return $sql;
}
else {
return "";
}
}
В абстрактном классе FormaEntity У меня есть эта функция, которая должначтобы взять строку sql из предыдущей функции, completeCheck () и выполняет запрос mysql и возвращает объект.Вот функция:
namespace Drupal\docebo_login;
use Drupal\Core\Access\AccessResult;
abstract class FormaEntity {
.
.
.
public function getCCresult() {
if ($this->completionCheck() == "") {
\Drupal\Core\Database\Database::setActiveConnection();
return false;
}
$result = $this->connection->query($this->completionCheck())->fetch();
\Drupal\Core\Database\Database::setActiveConnection();
if ($result > 5 ) {
$check = "fail";
}
else {
$check = "pass";
}
return $check;
}
В другом классе под названием FormaNotification , который также расширяет FormaEntity функцию записи, которая сможет вызывать функцию getCCresult () из абстрактного класса FormaEntity Это функция:
namespace Drupal\docebo_login;
use Drupal\docebo_login\FormaEntity;
class FormaNotification extends FormaEntity {
.
.
.
public function getCreditResult() {
return parent::getCCresult();
}
Наконец, в своем файле .theme я написал функцию с именем txhs_preprocess_node__course (& $ variable)) , который вызывает предыдущую функцию и должен извлекать информацию, которую я извлек из базы данных.Но это не так.Вот моя функция темы:
use Drupal\docebo_login\FormaNotification;
use Drupal\docebo_login\FormaMyCourse;
use Drupal\docebo_login\FormaRegis;
use Drupal\Core\Url;
.
.
.
function txhs_preprocess_node__course(&$variables) {
$noti = new FormaNotification();
var_dump($noti->getCreditResult());
exit;
if ($noti->completionCheck() == "fail") {
$check = "fail";
}
else {
$check = "pass";
}
// $variables['creditCheck'] = "HI";
}
Я перепробовал множество вещей, таких как переименование функций, перемещение функций вокруг файла темы ... но я действительно не знаю, что я делаюнеправильно.
Я использую php 7.2.11, с mysql 5.0.12 с drupal 8.5.6
Я ожидаю, что out будет объектом с номером, но вместо этого я получаю ошибку:
На веб-сайте произошла непредвиденная ошибка.Пожалуйста, попробуйте позже.Ошибка: вызов неопределенного метода Drupal \ docebo_login \ FormaNotification :: completeCheck () в Drupal \ docebo_login \ FormaEntity-> getCCresult () (строка 106 модулей / custom / docebo_login / src / FormaEntity.php).