1 Отредактировано Selena (24.04.2017 18:24:14)

Тема: [Решено]Не работает стандартное добавление/редактирование ORM-объекта

Добрый день!
Мне необходимо переписать функционал по работе с пользователями под свои нужды. Для этого я создала новый модуль и скопировала из модуля users необходимые мне файлы (user.inc.php, api.inc.php, ctrl.inc.php), заменив namespace и переписав код по видеоуроку №8. Также полностью скопировала папку view/form. Таблица пользователей отлично показывается, сортировка и удаление работает. А вот редактирование и добавление и клонирование не хочет. В консоли отображается ошибка: Исключение - "Unable to load template rs '/var/www/ember.local/html/modules/users_r/view/form/users_r_model_orm_user_1841709390.auto.tpl'". Помогите, пожалуйста.

Повысить оценку Понизить оценку

2 Отредактировано Закусило Александр (24.04.2017 11:36:39)

Re: [Решено]Не работает стандартное добавление/редактирование ORM-объекта

Дело в шаблоне, который по видимому не может найти системы. Дайте полный код ошибки.

3

Re: [Решено]Не работает стандартное добавление/редактирование ORM-объекта

Ответ

GET
XHR
http://ember.local/admin/users_r-ctrl/ [HTTP/1.0 503 Service Unavailable 68мс]
Ответ
<div style='background-color: #f3f3f3;'>
          <div><b>Исключение - "Unable to load template rs '/var/www/ember.local/html/modules/users_r/view/form/users_r_model_orm_user_1841709390.auto.tpl'"</b></div>
          <table valign='top'><tr><td>Код ошибки:</td><td>0</td></tr>
          <tr><td>Тип ошибки:</td><td>SmartyException</td></tr>
          <tr><td>Файл:</td><td>/var/www/ember.local/html/core/smarty/sysplugins/smarty_internal_templatebase.php</td></tr> 
          <tr><td>Строка:</td><td>127</td></tr> 
          <tr><td>Стек вызова:</td><td><pre>#0 /var/www/ember.local/html/core/rs/orm/abstractobject.inc.php(1262): Smarty_Internal_TemplateBase->fetch('/var/www/ember....')
#1 /var/www/ember.local/html/core/rs/controller/admin/helper/crudcollection.inc.php(382): RS\Orm\AbstractObject->getForm(Array, NULL, false)
#2 /var/www/ember.local/html/core/rs/controller/admin/helper/crudcollection.inc.php(658): RS\Controller\Admin\Helper\CrudCollection->getForm()
#3 /var/www/ember.local/html/cache/smarty/compile/templates_system_admin_crud_form_tpl.rs.tpl.php(84): RS\Controller\Admin\Helper\CrudCollection->offsetGet('form')
#4 /var/www/ember.local/html/core/smarty/sysplugins/smarty_internal_templatebase.php(182): content_58fb5ad4d21e05_33445197(Object(Smarty_Internal_Template))
#5 /var/www/ember.local/html/core/rs/controller/result/standart.inc.php(237): Smarty_Internal_TemplateBase->fetch('%system%/admin/...')
#6 /var/www/ember.local/html/core/rs/controller/result/standart.inc.php(261): RS\Controller\Result\Standart->getHtml()
#7 /var/www/ember.local/html/core/rs/controller/abstractcontroller.inc.php(152): RS\Controller\Result\Standart->getOutput()
#8 /var/www/ember.local/html/core/rs/controller/abstractcontroller.inc.php(134): RS\Controller\AbstractController->processResult(Object(RS\Controller\Result\Standart))
#9 /var/www/ember.local/html/core/rs/controller/abstractmodule.inc.php(237): RS\Controller\AbstractController->exec(false)
#10 /var/www/ember.local/html/core/rs/controller/admin/front.inc.php(67): RS\Controller\AbstractModule->exec(false)
#11 /var/www/ember.local/html/core/rs/controller/admin/crud.inc.php(482): RS\Controller\Admin\Front->exec(false)
#12 /var/www/ember.local/html/modules/main/controller/admin/index.inc.php(80): RS\Controller\Admin\Crud->exec()
#13 /var/www/ember.local/html/core/rs/controller/abstractcontroller.inc.php(128): Main\Controller\Admin\Index->actionIndex()
#14 /var/www/ember.local/html/core/rs/router/manager.inc.php(347): RS\Controller\AbstractController->exec()
#15 /var/www/ember.local/html/core/rs/router/manager.inc.php(368): RS\Router\Manager->applyRoute(Object(RS\Router\Route))
#16 /var/www/ember.local/html/index.php(24): RS\Router\Manager->dispatch()
#17 {main}</pre></td></tr> 
          </table>
          </div>

GET
http://ember.local/resource/img/adminstyle/node.png [HTTP/1.1 200 OK 0мс]
Заголовки
Ответ
Стек вызовов

Повысить оценку Понизить оценку

4

Re: [Решено]Не работает стандартное добавление/редактирование ORM-объекта

ctrl.inc.php

<?php
/**
* http://r.ru)
*
*/

namespace Users_r\Controller\Admin;
use \RS\Html\Table\Type as TableType,
    \RS\Html\Toolbar\Button as ToolbarButton,
    \RS\Html\Toolbar,
    \RS\Html\Filter,
    \RS\Html\Table;

/**
* Контроллр пользователей
* @ingroup Users
*/
class Ctrl extends \RS\Controller\Admin\Crud
{
       
    function __construct()
    {
        parent::__construct(new \Users_r\Model\Api());
    }
   
    function helperIndex()
    {
        $helper = parent::helperIndex();
        $helper->setTopTitle(t('Пользователи'));
        $edit_pattern = $this->router->getAdminPattern('edit', array(':id' => '@id'));
        $helper->setTable(new Table\Element(array(
            'Columns' => array(
                new TableType\Checkbox('id', array('showSelectAll' => true)),           
                new TableType\Text('id', '№', array('ThAttr' => array('width' => '50'), 'Sortable' => SORTABLE_BOTH, 'CurrentSort' => SORTABLE_DESC)),
                new TableType\Text('login', t('Логин'), array('href' => $edit_pattern, 'Sortable' => SORTABLE_BOTH, 'linkAttr' => array('class' => 'crud-edit'))),
                new TableType\Text('surname', t('Фамилия'), array('href' => $edit_pattern, 'Sortable' => SORTABLE_BOTH, 'linkAttr' => array('class' => 'crud-edit'))),
                new TableType\Text('name', t('Имя'), array('href' => $edit_pattern, 'Sortable' => SORTABLE_BOTH, 'linkAttr' => array('class' => 'crud-edit'))),
                new TableType\Text('midname', t('Отчество'), array('href' => $edit_pattern, 'Sortable' => SORTABLE_BOTH, 'linkAttr' => array('class' => 'crud-edit'))),
                new TableType\Actions('id', array(
                        new TableType\Action\Edit($this->router->getAdminPattern('edit', array(':id' => '~field~'))),
                        new TableType\Action\DropDown(array(
                            array(
                                'title' => t('клонировать пользователя'),
                                'attr' => array(
                                    'class' => 'crud-add',
                                    '@href' => $this->router->getAdminPattern('clone', array(':id' => '~field~')),
                                )
                            ), 
                            array(
                                'title' => t('заказы пользователя'),
                                'attr' => array(
                                    '@href' => $this->router->getAdminPattern(false, array(':f[user_id]' => '~field~'), 'shop-orderctrl'),
                                )
                            ),
                        ))
                    ),
                    array('SettingsUrl' => $this->router->getAdminUrl('tableOptions'))
                ),
        ))));
        return $helper;
    }
}

Повысить оценку Понизить оценку

5

Re: [Решено]Не работает стандартное добавление/редактирование ORM-объекта

api.inc.php

<?php
/**
* http://r.ru)
**/
namespace Users_r\Model;

class Api extends \RS\Module\AbstractModel\EntityList
{
    function __construct()
    {
        parent::__construct(new \Users_r\Model\Orm\User());
    }
}

Повысить оценку Понизить оценку

6

Re: [Решено]Не работает стандартное добавление/редактирование ORM-объекта

user.inc.php

<?php
/**
* http://r.ru)
*
*/
namespace Users_r\Model\Orm;
use \RS\Orm\Type;

/**
* Объект - пользователь системы.
*/
class User extends \RS\Orm\OrmObject
{
    const
        SESSION_LAST_VISIT_VAR = 'last_visit',
        PASSWORD_LEN = 4,
        SUPERVISOR_GROUP = 'supervisor';
       
    protected static
        $table = "users";
   
    protected
        $default_group = 'guest', //Группа, к которой определять пользователя по умолчанию
        $authorized_user_group = 'clients', //Группа, к которой относятся все авторизованные пользователи
        $access_menu_table,
        $access_module_table,
       
        $cache_cost_id,
        $cache_mod_access,
        $cache_menu_access,
        $cache_admin_menu_access,
        $cache_allow_sites;
       
    protected $groups;
   
    function __construct($id = null, $cache = true)
    {
        $this->access_menu_table = \Setup::$DB_TABLE_PREFIX.'access_menu';
        $this->access_module_table = \Setup::$DB_TABLE_PREFIX.'access_module';       
        parent::__construct($id, $cache);
    }

    protected function _init()
    {
        parent :: _init();
       
        $for_company = array('is_company' => 1);
        $chk_depend = array(get_class($this), 'chkDepend');       
       
        $this->getPropertyIterator()->append(array(
            t('Основные'),
                    'name' => new Type\Varchar(array(
                        'maxLength' => '100',
                        'description' => t('Имя'),
                        'Checker' => array('chkEmpty', t('Укажите, пожалуйста, имя')),
                    )),
        ));
    }
}

Повысить оценку Понизить оценку

7

Re: [Решено]Не работает стандартное добавление/редактирование ORM-объекта

Попробуйте проверить права на папки modules и tamplates

Повысить оценку Понизить оценку

8

Re: [Решено]Не работает стандартное добавление/редактирование ORM-объекта

Права на папки 775. Дело в том, что я шаблоны нигде и не вызываю. Понять не могу, откуда он его тянет sad

Повысить оценку Понизить оценку

9

Re: [Решено]Не работает стандартное добавление/редактирование ORM-объекта

Selena пишет:

Права на папки 775. Дело в том, что я шаблоны нигде и не вызываю. Понять не могу, откуда он его тянет sad

Я думаю Вам более детально объяснят разработчики. Но у меня была точно такая же проблема, после переноса с локалки на сервер. И были такие же ошибки и проблема решилась путем прав на папки 777

Повысить оценку Понизить оценку

10 Отредактировано Закусило Александр (24.04.2017 15:46:18)

Re: [Решено]Не работает стандартное добавление/редактирование ORM-объекта

777 нельзя ставить на папки. Надо 755. Помимо помимо прав на папки существует ещё и группа которой назначены права на редактирование или создание файлов. В этом и суть назначения прав. Если ставить 777, то будет непременно дыра, за счёт того, что это разрешение любому делать с папкой всё что захочется, даже извне.

Шаблон /var/www/ember.local/html/modules/users_r/view/form/users_r_model_orm_user_1841709390.auto.tpl система создаёт автоматически. Это откомпиленный шаблон, который создаётся автоматом, при открытии на создание и редактирование объекта, в Вашем случае это объект user в вашем модуле. И такая ошибка характерна именно из-за того, что не хватает прав на запись в Вашу папку.

В папке права надо сделать 755 и прописать владельца того от которого работает PHP. Это может сделать Ваш хостинг. Обычно такое происходит, когда доступ Ваш FTP или SSH не совпадает по правам для разрешения записи.