DEV: Каталог (редактирование SLUG)

This commit is contained in:
Evg 2023-05-09 16:00:46 +03:00
parent e441c5c85d
commit 466b08b145
18 changed files with 65 additions and 16 deletions

View file

@ -10,10 +10,12 @@ use App\Models\{SubscriptionModel, ActionModel, FacetModel, NotificationModel};
use UserData, Meta, Access;
use App\Validate\RulesItem;
use App\Traits\Slug;
use App\Traits\Poll;
class AddItemController extends Controller
{
use Slug;
use Poll;
// Add Domain Form
@ -60,12 +62,17 @@ class AddItemController extends Controller
$published = Request::getPost('published') == 'on' ? 1 : 0;
$published = UserData::checkAdmin() ? $published : 0;
if (WebModel::getSlug($slug = $this->getSlug($data['title']))) {
$slug = $slug . "-";
}
$item_last = WebModel::add(
[
'item_url' => $data['url'],
'item_domain' => $basic_host,
'item_title' => $data['title'],
'item_content' => $data['content'] ?? __('web.desc_formed'),
'item_slug' => $slug,
'item_published' => $published,
'item_user_id' => $this->user['id'],
'item_close_replies' => Request::getPost('close_replies') == 'on' ? 1 : null,

View file

@ -40,8 +40,9 @@ class DetailedController extends Controller
$m = [
'og' => true,
'imgurl' => $content_img,
'url' => url('website', ['slug' => $item['item_domain']]),
'url' => url('website', ['id' => $item['item_id'], 'slug' => $item['item_slug']]),
];
$title = __('web.website') . ': ' . $item['item_title'];
$description = $item['item_title'] . '. ' . $item['item_content'];

View file

@ -11,6 +11,7 @@ use App\Models\User\UserModel;
use UserData, Meta, Access;
use App\Traits\Poll;
use App\Traits\Slug;
use App\Traits\Author;
use App\Traits\Related;
@ -19,6 +20,7 @@ use App\Validate\RulesItem;
class EditItemController extends Controller
{
use Poll;
use Slug;
use Author;
use Related;
@ -91,12 +93,22 @@ class EditItemController extends Controller
$new_user_id = $this->selectAuthor($item['item_user_id'], Request::getPost('user_id'));
if (UserData::checkAdmin()) {
$item_slug = Request::getPost('item_slug');
if ($item_slug != $item['item_slug']) {
if (WebModel::getSlug($slug = $this->getSlug($item_slug))) {
$slug = $slug . "-";
}
}
}
WebModel::edit(
[
'item_id' => $item['item_id'],
'item_url' => $data['url'],
'item_title' => $data['title'],
'item_content' => $data['content'],
'item_slug' => $slug ?? $item['item_slug'],
'item_domain' => RulesItem::getRegisterable($data['url']),
'item_title_soft' => $data['title_soft'] ?? '',
'item_content_soft' => $data['content_soft'] ?? '',

View file

@ -45,7 +45,7 @@ class ReplyController extends Controller
$item = ItemPresence::index($item_id);
$url = url('website', ['slug' => $item['item_domain']]);
$url = url('website', ['id' => $item['item_id'], 'slug' => $item['item_slug']]);
Validator::Length($content, 6, 555, 'content', $url);
// Access verification
@ -54,7 +54,7 @@ class ReplyController extends Controller
redirect('/');
}
$redirect = url('website', ['slug' => $item['item_domain']]) . '#reply_' . $reply['reply_id'];
$redirect = $url . '#reply_' . $reply['reply_id'];
ReplyModel::edit(
[
@ -77,7 +77,7 @@ class ReplyController extends Controller
$item = ItemPresence::index($item_id);
$website_url = url('website', ['slug' => $item['item_domain']]);
$website_url = url('website', ['id' => $item['item_id'], 'slug' => $item['item_slug']]);
Validator::Length($content, 6, 555, 'content', $website_url);
// We will check for freezing, stop words, the frequency of posting content per day

View file

@ -195,7 +195,7 @@ class HomeModel extends \Hleb\Scheme\App\Models\MainModel
public static function latestItems($limit)
{
$sql = "SELECT item_title, item_domain FROM items WHERE item_published = 1 AND item_is_deleted = 0 ORDER BY item_id DESC LIMIT :limit";
$sql = "SELECT item_id, item_title, item_slug, item_domain FROM items WHERE item_published = 1 AND item_is_deleted = 0 ORDER BY item_id DESC LIMIT :limit";
return DB::run($sql, ['limit' => $limit])->fetchAll();
}

View file

@ -15,6 +15,7 @@ class UserAreaModel extends \Hleb\Scheme\App\Models\MainModel
item_id,
item_title,
item_content,
item_slug,
item_published,
item_user_id,
item_url,
@ -66,6 +67,7 @@ class UserAreaModel extends \Hleb\Scheme\App\Models\MainModel
item_url,
item_title,
item_content,
item_slug,
item_title_soft,
item_domain,
item_date,
@ -74,6 +76,7 @@ class UserAreaModel extends \Hleb\Scheme\App\Models\MainModel
item_votes,
item_following_link,
item_published,
item_telephone,
item_is_deleted,
votes_item_user_id, votes_item_item_id
FROM favorites fav

View file

@ -82,6 +82,7 @@ class WebModel extends \Hleb\Scheme\App\Models\MainModel
item_id,
item_title,
item_content,
item_slug,
item_published,
item_user_id,
item_url,
@ -176,6 +177,16 @@ class WebModel extends \Hleb\Scheme\App\Models\MainModel
item_following_link,
item_close_replies,
item_poll,
item_date,
item_is_portal,
item_is_forum,
item_is_blog,
item_is_reference,
item_is_goods,
item_telephone,
item_email,
item_vk,
item_telegram,
item_is_deleted,
votes_item_user_id, votes_item_item_id,
rel.*,
@ -207,6 +218,7 @@ class WebModel extends \Hleb\Scheme\App\Models\MainModel
item_domain,
item_title,
item_content,
item_slug,
item_published,
item_user_id,
item_poll,
@ -216,6 +228,7 @@ class WebModel extends \Hleb\Scheme\App\Models\MainModel
:item_domain,
:item_title,
:item_content,
:item_slug,
:item_published,
:item_user_id,
:item_poll,
@ -235,6 +248,7 @@ class WebModel extends \Hleb\Scheme\App\Models\MainModel
item_domain = :item_domain,
item_title = :item_title,
item_content = :item_content,
item_slug = :item_slug,
item_title_soft = :item_title_soft,
item_content_soft = :item_content_soft,
item_published = :item_published,
@ -282,6 +296,7 @@ class WebModel extends \Hleb\Scheme\App\Models\MainModel
$sql = "SELECT
item_id,
item_title,
item_slug,
item_domain
FROM items
LEFT JOIN facets_items_relation on item_id = relation_item_id
@ -319,4 +334,9 @@ class WebModel extends \Hleb\Scheme\App\Models\MainModel
return DB::run($sql, ['url' => $url])->fetchAll();
}
public static function getSlug($slug)
{
return DB::run("SELECT item_slug FROM items WHERE item_slug = :slug", ['slug' => $slug])->fetch();
}
}

View file

@ -53,7 +53,7 @@
<span class="mr15 ml5 gray-600 lowercase">
<?= Html::langDate($reply['date']); ?>
</span>
<a class="black" href="<?= url('website', ['slug' => $reply['item_domain']]); ?>">
<a class="black" href="<?= url('website', ['id' => $reply['item_id'], 'slug' => $reply['item_slug']]); ?>">
<svg class="icons">
<use xlink:href="/assets/svg/icons.svg#eye"></use>
</svg>

View file

@ -20,6 +20,12 @@
</fieldset>
<?php if (UserData::checkAdmin()) : ?>
<fieldset>
<label for="post_slug">SLUG (URL)</label>
<input minlength="6" maxlength="250" value="<?= $domain['item_slug']; ?>" type="text" required name="item_slug">
<div class="help">> 6 <?= __('app.characters'); ?></div>
</fieldset>
<fieldset>
<input type="checkbox" name="published" <?php if ($domain['item_published'] == 1) : ?>checked <?php endif; ?>> <span class="red"><?= __('web.posted'); ?></span>
</fieldset>

View file

@ -79,7 +79,7 @@ use Hleb\Constructor\Handlers\Request; ?>
<ul>
<?php foreach ($data['items'] as $item) : ?>
<li class="mt15">
<a href="<?= url('website', ['slug' => $item['item_domain']]); ?>">
<a href="<?= url('website', ['id' => $item['item_id'], 'slug' => $item['item_slug']]); ?>">
<?= $item['item_title']; ?> <span class="green"><?= $item['item_domain']; ?></span>
</a>
</li>

View file

@ -1,6 +1,6 @@
<?= insert('/_block/add-js-css'); ?>
<div id="contentWrapper" class="wrap wrap-max">
<main>
<main class="w-100">
<?= insert('/_block/navigation/breadcrumbs', [
'list' => [
[

View file

@ -6,7 +6,7 @@
</h2>
<?php if (!empty($data['items'])) : ?>
<?= insert('/content/item/item-card', ['data' => $data, 'user' => $user, 'delete_fav' => 'yes', 'screening' => $data['screening']]); ?>
<?= insert('/content/item/item-card', ['data' => $data, 'user' => $user, 'delete_fav' => 'yes', 'screening' => $data['screening'], 'sort' => false]); ?>
<?php else : ?>
<?= insert('/_block/no-content', ['type' => 'small', 'text' => __('web.no_bookmarks'), 'icon' => 'info']); ?>
<?php endif; ?>

View file

@ -39,7 +39,7 @@ $domain = $data['domain']; ?>
<h4 class="uppercase-box">Подборка</h3>
<?php foreach ($data['assembly'] as $site) : ?>
<div class="mb15<?php if($site['item_id'] == $domain['item_id']) : ?> bg-white p5-10<?php endif; ?>">
<a href="<?= url('website', ['slug' => $site['item_domain']]); ?>"><?= $site['item_title']; ?></a>
<a href="<?= url('website', ['id' => $site['item_id'], 'slug' => $site['item_slug']]); ?>"><?= $site['item_title']; ?></a>
<?= Html::facets($site['facet_list'], 'category', 'tag mr15'); ?>
<?php if($site['item_id'] != $domain['item_id']) : ?>
<a href="<?= url('content.edit', ['type' => 'item', 'id' => $site['item_id']]); ?>">

View file

@ -61,7 +61,7 @@
<svg class="icons gray ml5">
<use xlink:href="/assets/svg/icons.svg#corner-down-right"></use>
</svg>
<a itemprop="url" class="black lowercase" href="<?= url('website', ['id' => $item['item_id'],'slug' => host($item['item_url'])]); ?>">
<a itemprop="url" class="black lowercase" href="<?= url('website', ['id' => $item['item_id'], 'slug' => $item['item_slug']]); ?>">
<?= __('web.more'); ?>
</a>
</div>

View file

@ -38,7 +38,7 @@
<svg class="icons gray ml5">
<use xlink:href="/assets/svg/icons.svg#corner-down-right"></use>
</svg>
<a class="black " href="<?= url('website', ['slug' => $item['item_domain']]); ?>">
<a class="black " href="<?= url('website', ['id' => $item['item_id'], 'slug' => $item['item_slug']]); ?>">
<?= __('web.more'); ?>
</a>

View file

@ -52,7 +52,7 @@
<svg class="icons">
<use xlink:href="/assets/svg/icons.svg#corner-down-right"></use>
</svg>
<a class="black" href="<?= url('website', ['slug' => $item['item_domain']]); ?>">
<a class="black" href="<?= url('website', ['id' => $item['item_id'], 'slug' => $item['item_slug']]); ?>">
<?= __('web.more'); ?>
</a>
</div>

View file

@ -119,7 +119,7 @@
<?php if ($data['similar']) : ?>
<h4 class="uppercase-box"><?= __('web.recommended'); ?></h4>
<?php foreach ($data['similar'] as $link) : ?>
<a class="inline mr20 mb15 block text-sm" href="<?= url('website', ['slug' => $link['item_domain']]); ?>">
<a class="inline mr20 mb15 block text-sm" href="<?= url('website', ['id' => $link['item_id'],'slug' => $link['item_slug']]); ?>">
<?= Img::website($link['item_domain'], 'thumbs', $link['item_title'], 'w-100 box-shadow'); ?>
<?= $link['item_title']; ?>
</a>
@ -131,4 +131,4 @@
</aside>
</div>
<?= insert('/_block/share', ['title' => __('app.share_website'), 'url' => config('meta.url') . url('website', ['slug' => $item['item_domain']])]); ?>
<?= insert('/_block/share', ['title' => __('app.share_website'), 'url' => config('meta.url') . url('website', ['id' => $item['item_id'], 'slug' => $item['item_slug']])]); ?>

View file

@ -46,7 +46,7 @@ $sw = $sw ?? '?';
<?= Img::website($result['item_domain'], 'favicon', $result['item_domain'], 'favicons mr5'); ?>
<?= $result['item_domain']; ?>
</span>
<a class="gray-600 ml15" href="<?= url('website', ['slug' => $result['item_domain']]); ?>"><?= __('web.more'); ?></a>
<a class="gray-600 ml15" href="<?= url('website', ['id' => $result['item_id'], 'slug' => $result['item_slug']]); ?>"><?= __('web.more'); ?></a>
</div>
<?= fragment($result['content'], 250); ?>
<?php elseif ($type == 'answer') : ?>