Удален раздел новостей с главной страницы и реализованы овальные пилюли для категорий проектов
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2025-11-26 21:02:33 +09:00
parent 803c1373e0
commit f72a4d5a5b
3 changed files with 120 additions and 54 deletions

73
reset_database.sql Normal file
View File

@@ -0,0 +1,73 @@
-- Скрипт для полной очистки базы данных smartsoltech_db
-- ВНИМАНИЕ: Этот скрипт удалит ВСЕ данные из базы данных!
-- Отключаем проверку внешних ключей
SET session_replication_role = replica;
-- Удаляем все таблицы Django приложений
DROP TABLE IF EXISTS django_migrations CASCADE;
DROP TABLE IF EXISTS django_content_type CASCADE;
DROP TABLE IF EXISTS auth_permission CASCADE;
DROP TABLE IF EXISTS auth_group CASCADE;
DROP TABLE IF EXISTS auth_group_permissions CASCADE;
DROP TABLE IF EXISTS auth_user CASCADE;
DROP TABLE IF EXISTS auth_user_groups CASCADE;
DROP TABLE IF EXISTS auth_user_user_permissions CASCADE;
DROP TABLE IF EXISTS django_admin_log CASCADE;
DROP TABLE IF EXISTS django_session CASCADE;
-- Удаляем таблицы приложения web
DROP TABLE IF EXISTS web_herobanner CASCADE;
DROP TABLE IF EXISTS web_category CASCADE;
DROP TABLE IF EXISTS web_service CASCADE;
DROP TABLE IF EXISTS web_client CASCADE;
DROP TABLE IF EXISTS web_order CASCADE;
DROP TABLE IF EXISTS web_project CASCADE;
DROP TABLE IF EXISTS web_project_categories CASCADE;
DROP TABLE IF EXISTS web_projectmedia CASCADE;
DROP TABLE IF EXISTS web_portfolioitem CASCADE;
DROP TABLE IF EXISTS web_portfolioitem_categories CASCADE;
DROP TABLE IF EXISTS web_portfoliocategory CASCADE;
DROP TABLE IF EXISTS web_portfoliomedia CASCADE;
DROP TABLE IF EXISTS web_review CASCADE;
DROP TABLE IF EXISTS web_blogpost CASCADE;
DROP TABLE IF EXISTS web_servicerequest CASCADE;
DROP TABLE IF EXISTS web_contactinfo CASCADE;
DROP TABLE IF EXISTS web_team CASCADE;
DROP TABLE IF EXISTS web_career CASCADE;
DROP TABLE IF EXISTS web_newspost CASCADE;
-- Удаляем таблицы приложения comunication
DROP TABLE IF EXISTS comunication_usercommunication CASCADE;
DROP TABLE IF EXISTS comunication_emailsettings CASCADE;
DROP TABLE IF EXISTS comunication_telegramsettings CASCADE;
-- Удаляем все последовательности (sequences)
DROP SEQUENCE IF EXISTS web_herobanner_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_category_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_service_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_client_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_order_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_project_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_project_categories_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_projectmedia_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_portfolioitem_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_portfolioitem_categories_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_portfoliocategory_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_portfoliomedia_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_review_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_blogpost_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_servicerequest_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_contactinfo_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_team_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_career_id_seq CASCADE;
DROP SEQUENCE IF EXISTS web_newspost_id_seq CASCADE;
DROP SEQUENCE IF EXISTS comunication_usercommunication_id_seq CASCADE;
DROP SEQUENCE IF EXISTS comunication_emailsettings_id_seq CASCADE;
DROP SEQUENCE IF EXISTS comunication_telegramsettings_id_seq CASCADE;
-- Включаем обратно проверку внешних ключей
SET session_replication_role = DEFAULT;
-- Выводим сообщение о завершении
SELECT 'База данных успешно очищена!' as status;

View File

@@ -456,43 +456,6 @@
</div>
</section>
<!-- News Section -->
<section class="section-padding bg-light" id="news">
<div class="container-modern">
<div class="text-center mb-5">
<h2 class="display-6 fw-bold mb-3">
Последние <span class="text-gradient">новости</span>
</h2>
</div>
<div class="row g-4">
<div class="col-lg-12">
<div class="news-card bg-white rounded-4 p-4 shadow">
<div class="d-flex align-items-center mb-3">
<span class="badge bg-primary rounded-pill px-3 py-1 me-3">24.11.2025</span>
<h5 class="mb-0">Новый сайт</h5>
</div>
<p class="text-muted mb-3">
Поздравляем всех наших клиентов с этой знаменательной датой!
Мы переписали свой сайт! теперь у нас современный дизайн и улучшенная функциональность...
</p>
<a href="{% url 'news' %}" class="text-primary fw-semibold">
Узнать больше <i class="fas fa-arrow-right ms-1"></i>
</a>
</div>
</div>
</div>
<div class="text-center mt-4">
<a href="{% url 'news' %}" class="btn btn-primary-modern btn-lg">
<i class="fas fa-newspaper me-2"></i>
Все новости
</a>
</div>
</div>
</section>
<!-- Career Section -->
<section class="section-padding" id="career">
<div class="container-modern">

View File

@@ -13,38 +13,58 @@
margin-bottom: 3rem;
}
/* Category Filter - Овальные пилюли */
.category-filter {
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 0.75rem;
margin-bottom: 3rem;
text-align: center;
padding: 0 1rem;
}
.category-btn {
display: inline-block;
padding: 0.75rem 1.5rem;
margin: 0.5rem 0.25rem;
border-radius: 25px;
.category-pill {
display: inline-flex;
align-items: center;
padding: 0.75rem 1.25rem;
background: white;
border: 2px solid #e2e8f0;
color: #4a5568;
border-radius: 50px; /* Овальная форма */
color: #64748b;
text-decoration: none;
transition: all 0.3s ease;
font-weight: 500;
font-size: 0.9rem;
white-space: nowrap;
box-shadow: 0 2px 8px rgba(0,0,0,0.05);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
.category-btn:hover {
border-color: #667eea;
.category-pill:hover {
color: #667eea;
border-color: #667eea;
background: rgba(102, 126, 234, 0.05);
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(102, 126, 234, 0.2);
box-shadow: 0 4px 12px rgba(102, 126, 234, 0.15);
text-decoration: none;
}
.category-btn.active {
.category-pill.active {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
border-color: transparent;
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.4);
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
transform: translateY(-1px);
}
.category-pill.active:hover {
background: linear-gradient(135deg, #5a6fd8 0%, #6b4190 100%);
box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4);
color: white;
}
.category-pill i {
font-size: 0.85rem;
margin-right: 0.5rem;
}
.projects-grid {
@@ -349,6 +369,16 @@
font-size: 1rem;
}
.category-filter {
gap: 0.5rem;
padding: 0 0.5rem;
}
.category-pill {
font-size: 0.85rem;
padding: 0.6rem 1rem;
}
.projects-grid {
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 1.5rem;
@@ -474,12 +504,12 @@
<div class="container">
{% if categories %}
<div class="category-filter">
<a href="{% url 'projects_list' %}" class="category-btn {% if not selected_category %}active{% endif %}">
<a href="{% url 'projects_list' %}" class="category-pill {% if not selected_category %}active{% endif %}">
<i class="fas fa-th me-2"></i>Все проекты
</a>
{% for category in categories %}
<a href="{% url 'projects_list' %}?category={{ category.id }}"
class="category-btn {% if selected_category == category.id|stringformat:'s' %}active{% endif %}">
class="category-pill {% if selected_category == category.id|stringformat:'s' %}active{% endif %}">
<i class="{{ category.icon }} me-2"></i>{{ category.name }}
</a>
{% endfor %}
@@ -521,7 +551,7 @@
<h3 class="project-title">{{ project.name }}</h3>
{% if project.short_description %}
<p class="project-description">{{ project.short_description|truncatewords:25 }}</p>
<p class="project-description">{{ project.short_description|striptags|truncatewords:25 }}</p>
{% endif %}
<!-- Статистика проекта -->