Сталкивался с подобной проблемой, по стандарту форму нельзя разрывать таблицей.. Решил проблему разместив всю форму внутри ячейки и вынес текстовые значения из формы в другую ячейку. Вот еще есть решение, возможно поможет.
С 1С и статусам заказа хуже дело обстоит, там нормально сделать только конфигурацию 1с править, обработку выгрузки. Так как приходит только статус "в обработке" остальные 1с не считает нужным присылать, в том числе "выполнен". Протокол не обязывает 1с присылать все статусы, а их там всего пара-тройка.
Я вот какое решение делал для такого случая
Сделал и на моем складе и на сайте одинаковые статусы заказов, чтобы при синхронизации по имени сопоставлять.
Затем доделал функцию синхронизации заказов
modules/shop/shop.1c.php 504 строка заменить функцию
Код
/**
* Обмен информацией о заказах: отправка файла обмена на сайт
*
* @return void
*/
private function sale_file()
{
$filename = basename($_GET['filename']);
if(!empty($status_name))
{
$status_id = DB::query_result("SELECT id FROM {shop_order_status} WHERE name1='%s' AND trash='0' LIMIT 1", $status_name);
}
else
$status_id = DB::query_result("SELECT id FROM {shop_order_status} WHERE status='%d' AND trash='0' LIMIT 1", $status);
if(DB::query_result("SELECT id FROM {shop_order} WHERE id=%d", $id))
{
$status_id_old=DB::query_result("SELECT status_id FROM {shop_order} WHERE id=%d", $id);
if($status == 1)
{
$this->diafan->_shop->order_pay($id);
}
else if($status_id_old!=$status_id)
{
$this->diafan->_shop->order_send_mail_change_status($id, $status_id);
}
DB::query("UPDATE {shop_order} SET status='%d', status_id=%d, created=%d WHERE id=%d", $status, $status_id, $created, $id);
}
else
{
DB::query("INSERT INTO {shop_order} (status, status_id, created".($id ? ", id" : '').") VALUES ('%d', %d, %d".($id ? ", %d" : '').")", $status, $status_id, $created, $id);
if(! $id)
{
$id = DB::insert_id();
}
}
if(isset($xml_product->Скидки->Скидка))
{
$discount_id = DB::query_result("SELECT id FROM {shop_discount} WHERE discount=%d", $xml_product->Скидки->Скидка->Процент);
}
$join_params = '';
if($import_good_id)
{
$good_id = DB::query_result("SELECT id FROM {shop} WHERE import_id='%h'".(! preg_match('/[^0-9]+/', $import_good_id) ? " OR id='%s'" : ''), $import_good_id, $import_good_id);
if($good_id && $import_price_id)
{
$price_id = DB::query_result("SELECT price_id FROM {shop_price} WHERE good_id=%d AND import_id='%h'".(! preg_match('/[^0-9]+/', $import_price_id) ? " OR price_id='%s'" : ''), $good_id,$import_price_id, $import_price_id);
if($price_id)
{
$rs = DB::query_fetch_all("SELECT * FROM {shop_price_param} WHERE price_id=%d", $price_id);
foreach ($rs as $r)
{
if($r["param_value"])
{
$i = (empty($i) ? 1 : $i + 1);
$join_params .= " INNER JOIN {shop_order_goods_param} AS p".$i." ON p".$i.".order_goods_id=g.id AND p".$i.".param_id=".$r["param_id"]." AND p".$i.".value=".$r["param_value"];
}
}
}
}
}
if(! $good_id && $article)
{
if(! $good_id = DB::query_result("SELECT id FROM {shop} WHERE article='%h'", $article))
continue;
}
if(! $good_id && $name)
{
if(! $good_id = DB::query_result("SELECT id FROM {shop} WHERE [name]='%h'", $name))
continue;
}
$order_goods_id = DB::query_result("SELECT g.id FROM {shop_order_goods} AS g".$join_params." WHERE g.order_id=%d AND g.good_id=%d AND g.trash='0'", $id, $good_id);
if($order_goods_id)
{
DB::query("UPDATE {shop_order_goods} SET count_goods=%d, price=%f, discount_id=%d WHERE id=%d", $count_goods, $price, $discount_id, $order_goods_id);
}
else
{
$order_goods_id = DB::query("INSERT INTO {shop_order_goods} (order_id, good_id, count_goods, price, discount_id) VALUES (%d, %d, %d, %f, %d)", $id, $good_id, $count_goods, $price, $discount_id);
}
$order_goods[] = $order_goods_id;
}
// удаляет покупки, которых нет в файле
if($order_goods)
{
$del_goods = DB::query_fetch_value("SELECT id FROM {shop_order_goods} WHERE id NOT IN (%s) AND order_id=%d", implode(",", $order_goods), $id, "id");
if($del_goods)
{
DB::query("DELETE FROM {shop_order_goods_param} WHERE order_goods_id IN (%s)", implode(",", $del_goods));
DB::query("DELETE FROM {shop_order_goods} WHERE id IN (%s)", implode(",", $del_goods));
}
}
DB::query("UPDATE {shop_order} SET summ=%f WHERE id=%d", $xml_order->Сумма, $id);
}
echo "success";
}
Там еще были доделки, я их убрал из кода, поэтому проверяйте, вместе исправим если что.
Передавать могут только пользователи со статусом "партнер". Вот тут условия при которых можно лишиться статуса.
Надеюсь публикация не запрещена?
Код
Партнер может* лишиться статуса партнера, в случае если:
Партнер лишился собственного сайта, либо не поддерживает и не обновляет его, либо партнерский сайт выглядит заброшенным, и/или работает с техническими ошибками.
Партнер более 6 месяцев не разрабатывает сайты с использованием DIAFAN.CMS (не покупает лицензии).
Партнер нарушил условия продаж лицензий на DIAFAN.CMS со скидкой, либо был замешан в нелегальной активности.
*Партнер лишается статуса на усмотрение компании Диафан. Возможно заново подать заявку на партнерство на текущих, устранив причины лишения статуса партнера (если у партнера был тарифный план 4.х с базовой стоимостью лицензии 2000 рублей, после лишение статуса восстановление на тарифный план 4.х невозможно.).
http://www.diafan.ru/dokument/full-manual/introduction/panel_redaktirovaniya_stranits_sayta_vizualnyy_red/
Пункт
"Добавить/Изменить изображение Добавить/Изменить изображение (плагин DIAFAN.CMS). "
Чтобы вставить изображение, необходимо:
1. Поставить клавиатурный курсор туда, где необходимо вставить изображение.
2. На панели редактирования нажать кнопку «Вставить/Редактировать изображение».
3. В появившемся окне можно либо кликнуть на ранее загруженные картинки, либо выбрать картинку с вашего компьютера (для этого необходимо нажать кнопку «Обзор» и в выпавшем проводнике компьютера выбрать нужную картинку, и уже затем кликнуть на неё мышкой).
4. В окне выбрать метод увеличения картинки до большой и нажать «Ok».
Таблица {images} колонка "name", уникальность гарантируется тем что в начало имени вставлен id изображения из этой же таблицы. Модифицированные изображения хранятся с тем же именем, только в других директориях.
Самый быстрый способ если у вас артикул не используется вместо артикула штрихкод ставить, например так:
- Заменить в файле "modules/shop/shop.1c.php" $xml_product->Артикул на $xml_product->Штрихкод
Если отдельной характеристикой, то уже нужно дописывать shop.1c.php строка 1122
Код
DB::query("DELETE FROM {shop_param_element} WHERE param_id=%d AND element_id=%d", 777, $id);
DB::query("INSERT INTO {shop_param_element} (param_id, element_id, [value]) VALUES (%d, %d, '%s')", 777, $id, strval($xml_product->Штрихкод));
Здесь 777 это номер характеристики "Штрихкод" в диафане, при наведении на параметр в админке показывается.
Давно писал, уже не помню были ли ошибки.
Под IIS были проблемы с загрузкой файлов и картинок, не смог сходу решить, поэтому купили дешевый хостинг на апаче. В интернетах пишут что можно подпилить любое приложение для загрузки файлов в IIS, так что не отчаивайтесь.. решаемо.
Добавить в запрос к базе данных вывод полного текста и добавить этот тег в вывод новости
Код
$result = DB::query("SELECT e.id, e.created, e.[name], e.[anons], e.cat_id, e.site_id, e.[text] FROM {news} AS e"
.($this->diafan->_user->id ? " LEFT JOIN {access} AS a ON a.element_id=e.id AND a.module_name='news'" : "")
." WHERE e.[act]='1' AND e.trash='0'"
." AND e.created<=%d AND e.date_start<=%d AND (e.date_finish=0 OR e.date_finish>=%d)"
." AND (e.access='0'"
.($this->diafan->_user->id ? " OR e.access='1' AND a.role_id=".$this->diafan->_user->role_id : '')
.")"
." AND e.site_id IN (".implode(",", $site_ids).")"
." ORDER BY e.created DESC, e.id DESC LIMIT ".$limit, $time, $time, $time);
$last = '';
$items = '';
while ($row = DB::fetch_array($result))
{
if (! $this->diafan->configmodules("cat", "news", $row["site_id"]))
{
$row["cat_id"] = 0;
}
$link = $this->diafan->_route->link($row["site_id"], "news", $row["cat_id"], $row["id"]);
if(! $link)
{
continue;
}
if (empty($last))
{
$last = date("D, d F Y H:i:s T", $row['created']);
}
$items .= "
<item>
<title>".$this->diafan->prepare_xml($row['name'])."</title>
<link>".BASE_PATH_HREF.$link."</link>
<description>".$this->diafan->prepare_xml($row['anons'])."</description>
<yandex:full-text><![CDATA[".$this->diafan->prepare_xml($row['text'])."]]></yandex:full-text>\n
<pubDate>".date("D, d F Y H:i:s T", $row['created'])."</pubDate>"
.($this->diafan->configmodules("comments", "news", $row["site_id"]) ? "
<comments>".BASE_PATH_HREF.$link."</comments>" : "")."
</item>";
}
Смотри <модуль>.ajax.php там обработчик запроса. В ответе передаются команды, в том числе и на скрытие формы. Откроешь - там будет очевидно что комментить.
Да, в таком удобнее чтобы были разные базы. Но никто не мешает без сетевых передач данных (как это делается в диафане) просто инсертить в базы городов (благо все доступы есть) еще одну неопублкиванную новость по кнопке "закинуть всем отделениям".
Один раз я подобную проблему решил вот как:
во вьюшку добавил показ страницы сайта у которой название точно такое как у бренда.
Причем показывать только если это выборка по бренду.
Вьюшка тебе известна, модель тоже. В модели добавляешь данные страницы сайта если есть, а во вьюшке показываешь если есть данные.
Все формы что я в диафане видел отправляются аяксом, без перезагрузки. Или я не понимаю вопроса?
В обратной связи например посылается без перезагрузки запрос, если все хорошо, то форма скрывается и пишется сообщение "сообщение отправлено".
Возьми за основу какую-нибудь форму простую (например модуля feedback) скопируй ее, убери лишнее и поменяй в ней action на свой, найди где эта форма обрабатывается, например feedback.ajax.php и добавь там обработчик этого случая по примеру.
У моего провайдера СМС - 30 копеек. Цены вполне реальные. Евгений зарабатывает с реферала до 500 руб.
Бесшовная интеграция в Диафан это круто!
Евгений, спасибо!
Ссылку только реферальную исправь, а то благодарность не дойдет
В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке.
Подводим итоги 2023 года. Выпустили новую сборку DIAFAN.CMS 7.1.1, вводим новые тарифы на аренду сайта и коммерческую поддержку и автообновления с января 2024 г., строим планы на будущий год.