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


Изменения товара на внешней части сайта 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

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

 

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

  • Что нового в Shopkeeper 4.0.3:

    Исправлено некорректное определение языка по умолчанию В настройках в админке скрываются пароли. Добавлена возможность загружать картинки для категорий. shopkeeper.js - добавлена функция updateProductsPrice() для поддержки текстовых полей для цены. Twig-функции contentList() и includeContent() вынесены в отдельный класс. Добавлено событие "order.before_create". Сортировка всех полей типа контента перетаскиванием. Автоматическое сохранение сортировки полей при сохранении типа контента (не нужно нажимать на отдельную кнопку). В интерфейсе админа добавлено поле поиска для списка Composer-пакетов.

    Скачать можно на главной странице https://modx-shopkeeper.ru/

    Читать далее
  • Вот этот плагин:
    0_1550334109280_screenshot_022.png

    Вроде по умолчанию он выключен. Надо включить. Но плагин работает только на редактирование товаров, при удалении он делалать ничего не будет. Только что проверил кнопку, всё работает корректно, фильтры удаляются и добавляются, когда нужно. Но нужно очищать корзину после удаления товаров (возможно баг).

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

    @Andchir Если нажимаю кнопочку "Обновить значения", то в фильтрах появляются как раз те самые удаленные значения фильтра.. Потом приходится Ручками выбирать эти удаленные значения.
    вот так выглядит Управление фильтрами когда удаляешь ручками: https://yadi.sk/i/_zw64CGkZ_sAYg
    А вот так выглядит когда просто нажимаешь "Обновить значения": https://yadi.sk/i/7WFbXC6xV5sQAw (красным выделено, то что приходится постоянно удалять

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

    Участник @Jokerit написал в TagManager2 отображает в фильтре удаленные значения TV-полей:

    tmRefresh

    Так и не смог найти как включить

    Читать далее