Последние темы


Изменения товара на внешней части сайта modx

  • Товары созданы в отдельной таблице при помощи migx
    Требуется сделать так чтобы изменение товара можно было делать на внешней части сайта формой методом post
    Я сделал загрузку пути кеша изображения (phpthumbon)
    код html:

    [[!price? 
    &image_cache_h400=`[[!phpthumbon? &input=`[[+image_cache]]` &options=`h=400&w=500&zc=1&f=jpg`]]`
    ]]
    

    Код снипета:

    $id = $modx->getOption('id', $scriptProperties, 0);
    $image_cache_h400 = $modx->getOption('image_cache_h400', $scriptProperties, 0);
    $res = $modx->getObject('ShopContent',$id);
    $res->set('image_cache_h400', $image_cache_h400);
    $res->save();
    

    Но сделать так чтобы изменять ячейки в БД с товарами формой не получается.
    Помогите разобраться

  • Но сделать так чтобы изменять ячейки в БД с товарами формой не получается.

    Что конкретно не получается?

  • Не могу понять суть как сделать изменение товара на внешней части сайта через форму методом пост
    Или как еще можно сделать?
    У меня сайт цветочно магазина и там цена генерируется от состава, а прописывать состав не удобно через админку (manager) так как
    состав отдельно прописывается для 3 размеров (mini;midi;vip)
    alt text
    и нужно сделать изменение состава на самом сайте
    0_1549706842702_Screenshot_2.png
    Код формы таблицы

    [[!tovaredit]]
    <form class="form" action="[[*uri]][[*alias]].html" method="post">
    	<div class="panel-body text-danger">
    		<div class="table-responsive">
    			<table class="table table-hover table-striped table-bordered">
    				<thead>
    					<tr class="warning">
    						<th>Упаковка</th>
    						<th>mini</th>
    						<th>midi</th>
    						<th>VIP</th>
    						<th></th>
    					</tr>
    				</thead>
    				<tr><th>Шоколад</th>
    					<td><input type="text" class="form-control" name="chocolate" value="[[*chocolate]]"></td>
    					<td><input type="text" class="form-control" name="2chocolate" value="[[*2chocolate]]"></td>
    					<td><input type="text" class="form-control" name="3chocolate" value="[[*3chocolate]]"></td>
    					<td> руб.</td>
    				</tr>
    				<tr><th>Декор</th>
    					<td><input type="text" class="form-control" name="dekor" value="[[*dekor]]"></td>
    					<td><input type="text" class="form-control" name="2dekor" value="[[*2dekor]]"></td>
    					<td><input type="text" class="form-control" name="3dekor" value="[[*3dekor]]"></td>
    					<td> руб.</td>
    				</tr>
    				</tbody>
    			</table>
    		</div>
    	</div>
    	<div class="modal-footer">
    		<button type="button" class="btn btn-default">Сбросить</button>
    		<button type="button" class="btn btn-primary" name="tovaredit" value="Редактировать состав">Сохранить изменения</button>
    	</div>
    </form>
    

    И нужно сделать сниппет который будет отправлять данные в таблицу,
    а для кнопки сброс сделать подгрузку данных из таблицы

  • сделал все по этому урок
    Добавление, редактирование и удаление кастомных объектов

    и ничего не получается.

  • Во-первых у вас в коде не хватает такого кода

    $packageName = 'shop';
    $modelPath = $this->modx->getOption('core_path') . 'components/' . $packageName . '/model/';
    $modx->addPackage($packageName, $modelPath);
    

    Тут полезный урок:
    https://docs.modx.com/revolution/2.x/case-studies-and-tutorials/developing-an-extra-in-modx-revolution-modx-2.1-and-earlier

  • Я сделал все как в выше статье которой я указал.
    То бишь редактирование товара происходит на отдельной странице.
    Получилось сделать страницу редактирования.
    Она даже подгоняет данные уже введеные по id
    Но создать новый или редактировать не получается

  • Что я сделал уже.
    Создал папки /core/components/shop/processors/content/
    в них создал 3 файла
    create.class.php

    <?php
    class ShopContentCreateProcessor extends modObjectCreateProcessor {
    
        public $classKey = 'ShopContent';
        public $objectType = 'object';
        
        public function beforeSet() {
            if (!$this->modx->user->id) return 'Вам нужно авторизоваться';
            $this->setProperty('created_by', $this->modx->user->id);
            return true;
        }
    
    }
    
    return 'ShopContentCreateProcessor';
    

    remove.class.php

    <?php
    class ShopContentRemoveProcessor extends modObjectRemoveProcessor {
    
        public $classKey = 'ShopContent';
        public $objectType = 'object';
        
        public function beforeRemove() {
            if (!$this->modx->user->id) return 'Вам нужно авторизоваться';
            return true;
        }
    
    }
    
    return 'ShopContentRemoveProcessor';
    

    update.class.php

    <?php
    class ShopContentUpdateProcessor extends modObjectUpdateProcessor {
    
        public $classKey = 'ShopContent';
        public $objectType = 'object';
        
        public function beforeSet() {
            if (!$this->modx->user->id) return 'Вам нужно авторизоваться';
            return true;
        }
    
    }
    
    return 'ShopContentUpdateProcessor';
    

    в системных настройках изменил ключ: extension_packages

    [{"articles":{"path":"[[++core_path]]components/articles/model/"}},{"shop":{"path":"[[++core_path]]components/shop/model/"}}]
    

    проверил в консоли добавив новую строку

    <?php
    $item = $modx->newObject('ShopContent');
    $item->save();
    

    Создал страницу для редактирования товаров с id=73

    [[!getContentData]]
    [[!FormIt?  
      &hooks=`ShopContent,redirect`
      &redirectTo=`1`
      &placeholderPrefix=``
      &validate=`pagetitle:required`
    ]]
    <div class="col-lg-6" style="margin-left: auto; margin-right: auto; float: none;">
    [[!+error.process_error:notempty=`<div class="alert alert-dismissable alert-danger">
      <button type="button" class="close" data-dismiss="alert">×</button>
      <strong>Ошибка!</strong> [[!+error.process_error]]
    </div>`]]
    </div>
    <form class="bs-example form-horizontal" action="[[~[[*id]]]]" method="post">
        <input type="hidden" value="[[!+id]]" name="content">
    	<div class="form-group [[!+error.pagetitle:notempty=`has-error`]]">
    		<label for="pagetitle" class="control-label">Название товара</label>
    		<input type="text" value="[[!+pagetitle]]" class="form-control" id="pagetitle" placeholder="Введите название товара" name="student">
    		<span class="help-block">[[!+error.pagetitle]]</span>
    	</div>
    
        <div class="modal-footer">
            <button type="sumbit" class="btn btn-default" name="remove" value="remove" onclick="return confirm('Удалить това?')">Удалить</button>
            <button type="sumbit" class="btn btn-primary" value="Редактировать состав">Сохранить изменения</button>
        </div>
    </form>
    

    создал сниппеты
    shopContent

    <?php
    if (!$_POST['content']) {
        $processor = 'content/create';
    } else {
        $_POST['id'] = $_POST['content'];
        $modx->setPlaceholder('id', $_POST['id']);
        if ($_POST['remove']) {
            $processor = 'content/remove';
        } else {
            $processor = 'content/update';
        }
    }
    $processorProps = array('processors_path' => $modx->getOption('core_path')
                    . 'components/shop/processors/');
    $response = $modx->runProcessor($processor, $_POST, $processorProps);
    if ($response->isError()) {
        $hook->addError('process_error', $response->getMessage());
        return false;
    }
    return true;
    
    <?php
    if ($_GET['content'] && $content = $modx->getObject('ShopContent', $_GET['content'])) {
        $modx->setPlaceholders($content->toArray());
    }
    

    кнопка редактирования товара в прайсе товаров

    <a href="[[~73? &content=`[[+id]]`]]"><h3 itemprop="name">[[+pagetitle]]</h3></a>
    

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

  • name="student"
    

    Не вижу где в сниппете ловится это поле.

  • @Andchir Я уже изменил это параметр, но суть не меняется.
    При сохранение пишет Страница недоступна HTTP ERROR 500

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

 

Последние комментарии

  • Добавьте поле и обновите структуру таблицы БД

    <field key="resource_id" dbtype="int" precision="10" phptype="int" null="false" index="index" />

    http://joxi.ru/GrqZwZ5i40xlqm

    Как вы открываете эту страницу, по какой ссылке? Обычно создается ТВ с типом ввода migxdb, в свойствах которого указывается название конфигурации.

    Читать далее
  • D

    Участник @Andchir написал в Экспорт/импорт данных из таблиц пакетов MIGX db через плагин CatalogFill:

    resource_id

    и что это должно дать?
    как была ошибка 500 - так и есть

    Читать далее
  • это какое значение и где его оставить?

    Значение, которое было по умолчанию.

    //Название поля ID родителя $cf_config['parent_field'] = 'resource_id';

    Читать далее
  • Лучше редактировать шаблоны через админку. Там есть чекбокс "Очистить системный кэш".

    0_1566302652339_screenshot_195.png

    Также кэш можно очистить в настройках. Нужно очищать после редактирования шаблонов.

    0_1566302673468_screenshot_196.png

    Ещё в настройках есть параметр "Тема шаблонов". Можно скопировать папку "default" и создать свои шаблоны.

    0_1566302871928_screenshot_197.png

    Читать далее