Web
Analytics
Skip to content

Concrete5

на русском языке

Старые коды меняем на новые

Устаревшие и новые функции

Устаревшие функции

В этом документе список используемых сниппетов, которые были упразднены и их замена. Эти функции еще могут работать и до сих пор существовать, но в следующих версиях concrete5 могут быть удалены и таким образом, в будущем создадут проблемы. 

Эта работа в процессе выполнения. Этот список будет изменятся по мере нахождения старых функции и выпуска новых версий. 

Заметка:

При замене вы, иногда, будете встречать ссылку на $app. Вы можете получить доступ к приложению в некоторых контроллерах с помощью $this->app, или, если переменная не доступна, вызвать ее с помощью:

$app = \Concrete\Core\Support\Facade\Application::getFacadeApplication();

Использование $app способствует быстроте исполнения функций. 

Класс Псевдонимы

Версия 5.7 представила класс псевдонимов, чтобы разработчики могли проще использовать распространенные функции.  Эта идея пришла из старой архитектуры версии  5.6 , в которой псевдонимы широко использовались. Тем не менее, это вызывало больше непонимания, чем приносило пользу, так как людям было трудно находить откуда брала начало нужная функция. 

Поэтому, класс псевдонимов был упразднен и следует использовать полное пространство имен. Полный список псевдонимов можно найти в файле concrete/config/app.php.

Не правильно:

<?php
namespace Application\SomeStuff;

use Area;
use Block;
use Page;
// etc.


class MyClass
{
    // ...
}

Правильно:

<?php
namespace Application\SomeStuff;

use Concrete\Core\Area\Area;
use Concrete\Core\Block\Block;
use Concrete\Core\Page\Page;
// итд.


class MyClass
{
    // ...
}

Фасады

В общих случаях предлагается определить зависимости в конструкторах, а не использовать фасады. 

Не правильно:

<?php
namespace Application\SomeStuff;

use Concrete\Core\Support\Facade\Application;

class MyClass
{
    public function doSomething()
    {
        $app = Application::getFacadeApplication();
        $db = $app->make('database')->connection();
        if ($db->tableExists('Areas')) {
            $this->doSomethingElse();
        }
    }

    // ...
}

Правильно:

<?php
namespace Application\SomeStuff;

use Concrete\Core\Database\Connection\Connection;

class MyClass
{
    protected $db;

    public function __construct(Connection $db)
    {
        $this->db = $db;
    }

    public function doSomething()
    {
        if ($this->db->tableExists('Areas')) {
            $this->doSomethingElse();
        }
    }

    // ...
}

С таким типом кода, вы должны инициализировать свой класс через IoC контейнер, чтобы он загружал зависимости автоматически:


$my = $app->build('Application\SomeStuff\MyClass');

$my->doSomething();

Иногда это не возможно, например, когда модифицируется класс, в котором уже используется функциональность конструктора. В этих случаях можно использовать фасады. 

Функции Loader (загрузчика)

Loader::db() - упразднен с  5.7

замены:

$db = Database::connection();

$db = $app->make('database')->connection();
 
/* @var $db \Concrete\Core\Database\Connection\Connection */

Loader::helper() - упразднен с 5.7

замены:

$pkg = $app->make('/packages/' . $pkgHandle . '/helper/' . $service);

$h = $app->make('helper/' . $service);

примеры:

$th = $app->make('helper/text');

$nh = $app->make('helper/navigation');

$ps = $app->make('helper/form/page_selector');

$al = $app->make('helper/concrete/asset_library');

$color = $app->Cmake('helper/form/color');

$form = Loader::helper(‘form’) - упразднен с 5.7

замена:

block/view.php: $form is already defined

Loader::packageElement() - упразднен с 5.7

замена:

$ve = View::element($file, $args, $_pkgHandle);

Loader::element() - упразднен с 5.7

замена:

$ve = View::element($file, $args, $_pkgHandle);

Loader::model() - упразднен с 5.7

*замена: *none

Loader::library() - упразднен с 5.7

*замена: *none

Loader::controller() - упразднен с 5.7

замена:

in a page: Page::getPageController();

BlockType

BlockType::installBlockTypeFromPackage() - упразднен с 5.7

замена:

$bt = BlockType::installBlockType($handle, $pkg);

Database

Database::get() - упразднен с 5.7

замена:

$db = Database::connection();
$db = $app->make('database')->connection(); /* @var $db \Concrete\Core\Database\Connection\Connection */

$db->execute() - упразднен с 5.7

замена(s):

$db->executeQuery($q, array($arguments));

($q instanceOf \Doctrine\DBAL\Statement): $q->execute($arguments);

$db->GetOne() - упразднен с 5.7

замена:

$res = $db->fetchColumn($q, array($arguments))

$db->GetAll() - упразднен с 5.7

замена:

$res = $db->fetchAll($q, array($arguments))

File

$f->isError() - упразднен с 5.7

returns false

замена: none, (File::getByID() != null)

Controller

PageController::isPost() - упразднен с 5.7

замена:

$this->request->getMethod() == 'POST'

PageController::post() - упразднен с 5.7

замена:

$this->request->request->get()

PageController::get() - упразднен с 5.7 (for HTTP GET parameters)

замена:

$this->request->query->get()

PageController::get() все еще можно использовать для получения переменных, которые были определены через  PageController::set(). Если вы получаете параметры запроса HTTP, вы должны вместо этого использовать метод, указанный выше. 

Permissions (Разрешения)

FilePermissions::getGlobal() - упразднен с 5.7

замена:

$fp = new Permissions(FileSet::getGlobal());

TaskPermission() - упразднен с 5.7

замена:

$tp = new Permissions();

Request

Request::getInstance()

замена:

$r = $app->make(\Concrete\Core\Http\Request::class);

UserInfo

UserInfo::getByID()

замена:

$ui = $app->make(\Concrete\Core\User\UserInfoFactory::class)->getByID();

Плагины в Магазине 

Если вы разрабатываете плагины для магазина concrete5, пожалуйста обратите внимание, что если не указано по другому, руководство выше ссылается на самую последнюю версию ядра concrete5. Если плагин для магазина обеспечивает обратную совместимость с предыдущими версиями ядра, то вам понадобится использовать упраздненные коды, для обеспечения обратной совместимости и с ядром  API и с поддерживаемыми версиями PHP.

Загрузка беседы
Также как и одиночные страницы, типы страниц могут также иметь контроллер. Метод view() для контроллера типа страницы автоматически будет работать, когда страница будет просматриваться на сайте.
Как повысить репутацию сайта на 25% с помощью ссылок на другие ресурсы.