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


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

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

 

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

  • 0_1575831062911_shk-logo-small-blue.png
    Что нового в версии 4.1.3:

    Добавлен компонент "Отзывы и рейтинги" (есть интерфейс для администратора). Обновлены версии всех сторонних пакетов.

    Демо-сайт обновлен. https://shk4-demo.modx-shopkeeper.ru/
    Логин: admin
    Пароль: admin

    0_1575830694586_ru_screenshot001.png

    0_1575830705492_ru_screenshot002.png

    0_1575830710901_ru_screenshot003.png

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

    Если вдруг кто-то озадачится.
    В файле updateorderstatus.class.php

    //Формируем письмо $orderOutputData = $shopCart->getOrderData( $order_id ); $chunkArr = array( 'orderID' => $order_data['id'], 'orderDate' => $order_data['date'], 'statusName' => $status_data['label'], 'orderCurrency' => $shopCart->config['currency'], 'orderOutputData' => $orderOutputData, //добавляем строку 'status' => $status_data['color'], );

    Читать далее
  • Участник @Vladislava написал в Проблема с giftCards:

    @Andchir Спасибо большое! А не скажете ещё, где можно скачать Compare? Тоже не могу найти.

    Сравнение товаров
    https://e-store.shopkerx.net/katalog/modx_extras/compare

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

    @Andchir Спасибо большое! А не скажете ещё, где можно скачать Compare? Тоже не могу найти.

    Читать далее