实际上问题如下,共有三个域(例如site.ru、site2.ru 和site3.ru)。所有三个 DNS 托管提供商均查看相同的 IP 地址(例如 88.88.88.88,这是 Mikrotik ax3 路由器的外部地址)。内网路由器后面有三台服务器,IP 地址分别为 192.168.1.10、192.168.1.11 和 192.168.1.12。这些服务器中的每一个上都安装了 WEB 服务器,并且每个服务器上分别有一个站点 site.ru、site2.ru 和 site3.ru。在这样的配置中是否可以组织从外部网络对每个站点的访问?
Master Wenom's questions
其实问题就在标题里。是否有这种可能性,例如创建一个变量
TEST = "Test"
把它写在settings.py中,然后以某种方式显示在html模板中?
通过 models.Model 创建了一个类别模型,以便您可以在管理面板中添加条目。模型本身(来自models.py):
class KSRentalCategory(models.Model):
name = models.CharField(max_length=250, default="", verbose_name="Название Категории")
slug = models.SlugField(max_length=250, default="", verbose_name="URL")
image = FilerImageField(null=True, blank=True, on_delete=models.CASCADE, related_name="image_ks_rental_category")
sort = models.IntegerField(default="0", verbose_name="Сортировка")
is_active = models.BooleanField(default="True", verbose_name="Активно?")
date_pub = models.DateField(auto_now_add=True, blank=True, verbose_name="Дата добавления")
date_upd = models.DateTimeField(auto_now_add=False, auto_now=True, verbose_name="Дата редактирования")
def __str__(self):
return self.name
class Meta:
verbose_name = 'Категория'
verbose_name_plural = 'Категории'
在前端,您需要通过插件显示所有踏板的类别列表,我创建了一个插件(来自 cms_plugins.py):
@plugin_pool.register_plugin
class KSRentalCategoryPlugin(CMSPluginBase):
module = _("Аренда")
name = _("Категории - блок для главной")
render_template = "ksrental/blocks/rental_category_grid.html"
model = KSRentalCategory
allow_children = False
def render(self, context, instance, placeholder):
context = super(KSRentalCategoryPlugin, self).render(context, instance, placeholder)
return context
它不是那样工作的,因为模型类不应该是models.Model,而是CMSPluginBase!假设我找到了如何为一堆创建附加模型:
class KSRentalPLG(CMSPlugin):
rental = models.ForeignKey(KSRentalCategory, on_delete=models.CASCADE, verbose_name="Аренда", null=True, blank=True)
def get_title(self):
return self.rental.name
def __str__(self):
return self.get_title()
并在插件中更改模型
model = KSRentalCategory
在
model = KSRentalPLG
但在这种情况下,插件提供从列表中选择一个类别,我需要获取所有类别。然后迭代和推断?我哪里做错了?
其实问题是:
i = 0
for item in items:
Dict_<вот сюда i> = item
i = i + 1
通常,在输出处创建变量 Dict_0、Dict_1 等。
每个项目都是一个格式为“status: text\n parametr: text\n out: text”的字符串。您需要将每一行驱动到变量中,然后将其转换为字典
实际上,下一个问题是扩展反馈模块(关于整个网站,而不是产品评论),添加几个字段和上传照片的能力。如果可以使用此指令在管理面板中实现它:https ://www.cs-cart.ru/docs/4.11.x/developer_guide/core/images_subsystem.html#id2至少加个review吧,更新数据不是一帆风顺的,换了图片也不更新,不过这是另外一回事了,那么前端,出于明显的安全原因,这个选项是行不通的(由于没有 common/attach_images.tpl 文件)。在官方论坛上,他们说使用common/fileuploader.tpl,它是用于前端的,但没有人给出解释。一般来说,我无法理解如何通过它将图像添加到创建对象的 image_pair 中。也许有人遇到过类似的问题?!
有许多服务提供此服务。有谁知道如何绕过 t.me 阻止?服务以某种方式使更改的链接起作用,打开电报。
总的来说,问题的本质。我创建了一个带有自定义表格的插件。我创建了一个用于添加/编辑/删除记录的管理面板。通过 WP_List_Table 实现。一切似乎都正常工作,除了一件事:如果在字段中输入零 (0),它不会保存记录。而且,与表单中输入字段的类型和数据库表中的记录类型(int、varchar)无关。谁会告诉你在哪里挖?职业新.php
<div class="wrap">
<h1><?php _e( 'Add Career', 'wedevs' ); ?></h1>
<form action="" method="post">
<table class="form-table">
<tbody>
<tr class="row-name">
<th scope="row">
<label for="name"><?php _e( 'Career', 'wedevs' ); ?></label>
</th>
<td>
<input type="text" name="name" id="name" class="regular-text" placeholder="<?php echo esc_attr( '', 'wedevs' ); ?>" value="" required="required" />
</td>
</tr>
<tr class="row-coordinates">
<th scope="row">
<label for="coordinates"><?php _e( 'Coordinates', 'wedevs' ); ?></label>
</th>
<td>
<input type="text" name="coordinates" id="coordinates" class="regular-text" placeholder="<?php echo esc_attr( '', 'wedevs' ); ?>" value="" required="required" />
</td>
</tr>
</tbody>
</table>
<input type="hidden" name="field_id" value="0">
<?php wp_nonce_field( 'career-new' ); ?>
<?php submit_button( __( 'Add Career', 'wedevs' ), 'primary', 'submit_career' ); ?>
</form>
</div>
表单处理程序.php
<?php
class Form_Career_Handler {
public function __construct() {
add_action( 'admin_init', array( $this, 'handle_form' ) );
}
public function handle_form() {
if ( ! isset( $_POST['submit_career'] ) ) {
return;
}
if ( ! wp_verify_nonce( $_POST['_wpnonce'], 'career-new' ) ) {
die( __( 'Are you cheating?', 'wedevs' ) );
}
if ( ! current_user_can( 'read' ) ) {
wp_die( __( 'Permission Denied!', 'wedevs' ) );
}
$errors = array();
$page_url = admin_url( 'admin.php?page=career' );
$field_id = isset( $_POST['field_id'] ) ? intval( $_POST['field_id'] ) : 0;
$name = isset( $_POST['name'] ) ? sanitize_text_field( $_POST['name'] ) : '';
$coordinates = isset( $_POST['coordinates'] ) ? sanitize_text_field( $_POST['coordinates'] ) : '';
if ( ! $name ) {
$errors[] = __( 'Error: Career is required', 'wedevs' );
}
if ( ! $coordinates ) {
$errors[] = __( 'Error: Coordinates is required', 'wedevs' );
}
if ( $errors ) {
$first_error = reset( $errors );
$redirect_to = add_query_arg( array( 'error' => $first_error ), $page_url );
wp_safe_redirect( $redirect_to );
exit;
}
$fields = array(
'name' => $name,
'coordinates' => $coordinates,
);
if ( ! $field_id ) {
$insert_id = itmc_insert_career( $fields );
} else {
$fields['id'] = $field_id;
$insert_id = itmc_insert_career( $fields );
}
if ( is_wp_error( $insert_id ) ) {
$redirect_to = add_query_arg( array( 'message' => 'error' ), $page_url );
} else {
$redirect_to = add_query_arg( array( 'message' => 'success' ), $page_url );
}
wp_safe_redirect( $redirect_to );
exit;
}
}
new Form_Career_Handler();
职业功能.php
<?php
function itmc_get_all_career( $args = array() ) {
global $wpdb;
$defaults = array(
'number' => 20,
'offset' => 0,
'orderby' => 'id',
'order' => 'ASC',
);
$args = wp_parse_args( $args, $defaults );
$cache_key = 'career-all';
$items = wp_cache_get( $cache_key, 'wedevs' );
if ( false === $items ) {
$items = $wpdb->get_results( 'SELECT * FROM ' . $wpdb->prefix . 'itm_calc_career ORDER BY ' . $args['orderby'] .' ' . $args['order'] .' LIMIT ' . $args['offset'] . ', ' . $args['number'] );
wp_cache_set( $cache_key, $items, 'wedevs' );
}
return $items;
}
function itmc_get_career_count() {
global $wpdb;
return (int) $wpdb->get_var( 'SELECT COUNT(*) FROM ' . $wpdb->prefix . 'itm_calc_career' );
}
function itmc_get_career( $id = 0 ) {
global $wpdb;
return $wpdb->get_row( $wpdb->prepare( 'SELECT * FROM ' . $wpdb->prefix . 'itm_calc_career WHERE id = %d', $id ) );
}
function itmc_insert_career( $args = array() ) {
global $wpdb;
$defaults = array(
'id' => null,
'name' => '',
'coordinates' => '',
);
$args = wp_parse_args( $args, $defaults );
$table_name = $wpdb->prefix . 'itm_calc_career';
if ( empty( $args['name'] ) ) {
return new WP_Error( 'no-name', __( 'No Career provided.', 'wedevs' ) );
}
if ( empty( $args['coordinates'] ) ) {
return new WP_Error( 'no-coordinates', __( 'No Coordinates provided.', 'wedevs' ) );
}
$row_id = (int) $args['id'];
unset( $args['id'] );
if ( ! $row_id ) {
if ( $wpdb->insert( $table_name, $args ) ) {
return $wpdb->insert_id;
}
} else {
if ( $wpdb->update( $table_name, $args, array( 'id' => $row_id ) ) ) {
return $row_id;
}
}
return false;
}
告诉我是否有用于开发 CMS Wordpress 插件的简单文档资源。好久没接触PHP了,官方文档里也不是很清楚。如各处所述,如果没有创建自定义帖子类型,我找不到该插件的信息。我需要使插件具有三个实体(类别、命名法、城市)。但是我不明白如何实现某些东西,所以没有拐杖。我看了很多视频教程,他们制作了自定义帖子类型,类别使用分类法(但在这种情况下,自定义帖子可以链接到多个类别,但我只需要一个)。那些。事实上,它原来是博客文章的克隆,我不需要那样。
有一个清单:
mylist = [(1, 6), (2, 2), (3, 1), (5, 1), (6, 2), (8, 2)]
在这种情况下如何添加缺失的元素:假设第一个数字是索引,因此没有索引为 4 和 7 的数据。列表中总共应该有 8 个元素。如何使我无法理解的事情自动化。输出应如下所示:
mylist = [(1, 6), (2, 2), (3, 1), (4, 0), (5, 1), (6, 2), (7, 0), (8, 2)]
实际情况如下:有指令
location /content/ {
try_files $uri $uri/ /image.php;
}
含义如下,在此文件夹和子文件夹中都有内容 - 主要是图像及其缩略图,因此,如果没有缩略图,则调用 image.php 脚本创建它。在这种情况下,一切正常。但是如果我们添加资源缓存:
location /content/ {
try_files $uri $uri/ /image.php;
location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf|woff|woff2)$ {
allow all;
expires 365d;
add_header Cache-Control public;
add_header Access-Control-Allow-Origin *;
}
}
重定向停止工作。谁知道要解决什么问题才能使缓存工作并且脚本在没有缩略图的情况下工作?
实际上有一个问题:有一个站点“site.ru”在没有 Apache 的 NGINX+PHP-FPM 上工作。您需要关注子域的链接,例如:
subdomen01.site.ru
subdomen02.site.ru
subdomen03.site.ru
实际上保持在同一个域上,但地址必须是子域。很自然,它不适用于任何其他子域的地址。此外,子域实际上并不存在。
问题是,有两个模型彼此不相关。这是models.py中的两个模型
class Item(models.Model):
name = models.CharField(max_length=250, default="", verbose_name=_("Название работы"))
slug = models.SlugField(max_length=250, default="", verbose_name=_("URL"))
in_category = models.ForeignKey(Category, default="", verbose_name=_("Категория"))
item_type = models.ForeignKey(ItemType, verbose_name=_("Тип Элемента"))
description = models.TextField(_('Описание'), null=True, blank=True)
images = models.ManyToManyField(Images, blank=True, verbose_name=_("Изображения"))
sort = models.IntegerField(default="0", verbose_name=_("Сортировка"))
is_active = models.BooleanField(default="True", verbose_name=_("Активно?"))
date_pub = models.DateField(auto_now_add=True, blank=True, verbose_name=_("Дата добавления"))
date_upd = models.DateTimeField(auto_now_add=False, auto_now=True, verbose_name=_("Дата редактирования"))
def __str__(self):
return self.name
def get_absolute_url(self):
return "/portfolio/items/%s/" % self.slug
def get_category_url(self):
return "/portfolio/category/%s/" % self.in_category.slug
class Meta:
verbose_name = 'Элемент'
verbose_name_plural = 'Элементы'
class Settings(models.Model):
name = models.CharField(max_length=250, default="", verbose_name=_("Наименование"))
category_type = models.ForeignKey(CategoryType, verbose_name=_("Тип категория"))
sort = models.IntegerField(default="0", verbose_name=_("Сортировка"))
is_active = models.BooleanField(default="True", verbose_name=_("Активно?"))
date_pub = models.DateField(auto_now_add=True, blank=True, verbose_name=_("Дата добавления"))
date_upd = models.DateTimeField(auto_now_add=False, auto_now=True, verbose_name=_("Дата редактирования"))
def __str__(self):
return self.name
class Meta:
verbose_name = 'Настройка'
verbose_name_plural = 'Настройки'
这是views.py中的类
class ItemList(ListView):
model = Item
template_name = 'itm_portfolio/main.html'
一般来说,实际的问题是,除了来自 Item 模型的数据之外,如何在 main.html 模板中显示来自 Settings 模型的数据?
有一个任务是将数据导入opencart。实现相当不标准。但在这里我想使用标准函数来添加数据。因为它应该工作,在对某个地址的 POST 请求(已实现)时,包含 XML 的存档文件被解压缩到某个目录中(已实现)。接下来解析xml(部分实现),模型应该处理接收到的数据。很明显,在用户部分,模型不包含管理模型中可用的必要功能,因此复制了管理模型中的功能(来自类别模型 - /admin/model/catalog/category.php)进入用户模块模型。在发送解析数据的 $data 数组时,有一个问题(我只是想不通)language_id 值在哪里进入模型以及如何将其传输到那里?
foreach ($data['category_description'] as $language_id => $value) {
$this->db->query("
INSERT INTO
" . DB_PREFIX . "category_description
SET
category_id = '" . (int)$category_id . "',
language_id = '" . (int)$language_id . "',
name = '" . $this->db->escape($value['name']) . "',
description = '" . $this->db->escape($value['description']) . "',
meta_title = '" . $this->db->escape($value['meta_title']) . "',
meta_description = '" . $this->db->escape($value['meta_description']) . "',
meta_keyword = '" . $this->db->escape($value['meta_keyword']) . "'"
);
}
当使用 django-filer 字段时,将模型中的数据插入到 html 模板中可以这样完成:
{% load thumbnail %}
{% thumbnail company.logo 250x250 crop %}
我在模型中也有存储图像宽度和高度的字段。但是,如果我用模型中的数据代替数字,则此插入不起作用:
{% thumbnail instance.image instance.img_widthxinstance.img_height crop %}
这是可以理解的,获得了错误的插入。有谁知道如何以及这是否可能?