Убран список авторов, добавлена информация о организаторе портала.

This commit is contained in:
anibilag 2025-06-09 22:41:57 +03:00
parent 23bd232504
commit 933d82e3ac
3 changed files with 129 additions and 83 deletions

View File

@ -10,6 +10,7 @@ import ArticlesWord from './Words/ArticlesWord';
export function AuthorsSection() { export function AuthorsSection() {
const [authors, setAuthors] = useState<Author[]>([]); const [authors, setAuthors] = useState<Author[]>([]);
const showAuthors = false;
// Загрузка авторов // Загрузка авторов
useEffect(() => { useEffect(() => {
@ -29,96 +30,100 @@ export function AuthorsSection() {
return ( return (
<section className="py-16 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto"> <section className="py-16 px-4 sm:px-6 lg:px-8 max-w-7xl mx-auto">
<div className="text-center mb-12"> {showAuthors && (
<h2 className="text-3xl font-bold text-gray-900">Наши авторы</h2> <div className="text-center mb-12">
<p className="mt-4 text-lg text-gray-600 max-w-2xl mx-auto"> <h2 className="text-3xl font-bold text-gray-900">Наши авторы</h2>
Познакомьтесь с талантливыми писателями и экспертами, работающими для Вас <p className="mt-4 text-lg text-gray-600 max-w-2xl mx-auto">
</p> Познакомьтесь с талантливыми писателями и экспертами, работающими для Вас
</div> </p>
</div>
)}
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8"> {showAuthors && (
{authors <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
.filter(a => a.isActive) {authors
.map((author) => ( .filter(a => a.isActive)
<div key={author.id} className="bg-white rounded-lg shadow-md overflow-hidden transition-transform hover:scale-[1.02] h-full"> .map((author) => (
<div className="p-6 flex flex-col flex-grow min-h-[200px] h-full"> <div key={author.id} className="bg-white rounded-lg shadow-md overflow-hidden transition-transform hover:scale-[1.02] h-full">
<div className="flex items-center mb-4"> <div className="p-6 flex flex-col flex-grow min-h-[200px] h-full">
<img <div className="flex items-center mb-4">
src={author.avatarUrl} <img
alt={author.displayName} src={author.avatarUrl}
className="w-14 h-14 rounded-full object-cover mr-4 transition-transform duration-300 hover:scale-150" alt={author.displayName}
/> className="w-14 h-14 rounded-full object-cover mr-4 transition-transform duration-300 hover:scale-150"
<div> />
<h3 className="text-xl font-bold text-gray-900">{author.displayName}</h3> <div>
<div className="flex mt-2 space-x-2"> <h3 className="text-xl font-bold text-gray-900">{author.displayName}</h3>
{author.okUrl && ( <div className="flex mt-2 space-x-2">
<a {author.okUrl && (
href={author.okUrl} <a
target="_blank" href={author.okUrl}
rel="noopener noreferrer" target="_blank"
className="text-gray-400 hover:text-blue-500 transition-colors" rel="noopener noreferrer"
> className="text-gray-400 hover:text-blue-500 transition-colors"
<OkIcon size={18} /> >
</a> <OkIcon size={18} />
)} </a>
{author.vkUrl && ( )}
<a {author.vkUrl && (
href={author.vkUrl} <a
target="_blank" href={author.vkUrl}
rel="noopener noreferrer" target="_blank"
className="text-gray-400 hover:text-pink-500 transition-colors" rel="noopener noreferrer"
> className="text-gray-400 hover:text-pink-500 transition-colors"
<VkIcon size={18} /> >
</a> <VkIcon size={18} />
)} </a>
{author.websiteUrl && ( )}
<a {author.websiteUrl && (
href={author.websiteUrl} <a
target="_blank" href={author.websiteUrl}
rel="noopener noreferrer" target="_blank"
className="text-gray-400 hover:text-gray-700 transition-colors" rel="noopener noreferrer"
> className="text-gray-400 hover:text-gray-700 transition-colors"
<Globe size={18} /> >
</a> <Globe size={18} />
)} </a>
{author.email && ( )}
<a {author.email && (
href={author.email} <a
target="_blank" href={author.email}
rel="noopener noreferrer" target="_blank"
className="text-gray-400 hover:text-gray-700 transition-colors" rel="noopener noreferrer"
> className="text-gray-400 hover:text-gray-700 transition-colors"
<Mail size={18} /> >
</a> <Mail size={18} />
)} </a>
</div> )}
</div>
</div>
<p className="text-gray-600">{author.bio}</p>
<div className="mt-auto pt-6 border-t border-gray-100">
<div className="flex justify-between items-center">
<div className="flex items-center text-sm text-gray-500 space-x-2">
<span> {author.articlesCount} <ArticlesWord articles={author.articlesCount} /> · </span>
<div className="flex items-center">
<ThumbsUp size={16} className="mr-1" />
<span>{author.totalLikes}</span>
</div> </div>
</div> </div>
</div>
<p className="text-gray-600">{author.bio}</p>
<Link <div className="mt-auto pt-6 border-t border-gray-100">
to={`/search?author=${author.id}&role=WRITER&authorName=${author.displayName}`} <div className="flex justify-between items-center">
className="text-blue-600 hover:text-blue-800 text-sm font-medium"
> <div className="flex items-center text-sm text-gray-500 space-x-2">
Статьи автора <span> {author.articlesCount} <ArticlesWord articles={author.articlesCount} /> · </span>
</Link> <div className="flex items-center">
<ThumbsUp size={16} className="mr-1" />
<span>{author.totalLikes}</span>
</div>
</div>
<Link
to={`/search?author=${author.id}&role=WRITER&authorName=${author.displayName}`}
className="text-blue-600 hover:text-blue-800 text-sm font-medium"
>
Статьи автора
</Link>
</div>
</div> </div>
</div> </div>
</div> </div>
</div> ))}
))} </div>
</div> )}
</section> </section>
); );
} }

View File

@ -0,0 +1,39 @@
export function MasterBio() {
return (
<div className="bg-white shadow-lg rounded-xl p-6 max-w-4xl mx-auto mt-10 border border-gray-200">
<div className="flex flex-col lg:flex-row items-start lg:items-center gap-6">
<img
src="https://russcult.s3.regru.cloud/authors/a969e098-876f-413f-be58-5d5262c35250/1747254157569-314753361-admin_russ.webp"
alt="Золкин Илья Дмитриевич"
className="w-32 h-32 rounded-full object-cover border-4 border-gray-300"
/>
<div>
<h2 className="text-2xl font-bold text-gray-800 mb-1">Золкин Илья Дмитриевич</h2>
<p className="text-sm text-blue-600 font-medium mb-2">
Учредитель и главный редактор портала "Культура двух столиц"
</p>
<p className="text-gray-700 text-sm leading-relaxed mb-2">
Театральный обозреватель, журналист и фотохудожник. Основал в 2015 году и возглавляет интернет-портал russcult.ru,
посвящённый культурной жизни Москвы и Санкт-Петербурга. Является автором и ведущим популярной программы о театре <em>«Снимаю шляпу»</em>
на YouTube, где делится своим профессиональным взглядом на спектакли, актёров и театральные события.
</p>
<p className="text-gray-700 text-sm leading-relaxed mb-2">
Активно участвует в телевизионных проектах: выступал в передаче <em>«Наблюдатель»</em> на канале <em>«Культура»</em>,
является постоянным участником программы <em>«Хватит слухов»</em> на ТВЦ. Организатор культурных мероприятий и концертов,
в том числе в Доме-музее Зинаиды Юсуповой в Санкт-Петербурге.
</p>
<p className="text-gray-700 text-sm leading-relaxed mb-2">
Как фотокорреспондент, ежегодно освещает крупнейшие кинофестивали страны: Московский международный кинофестиваль, <em>«Виват, кино России»</em>, <em>«Амурская осень»</em>, <em>«Золотой Витязь»</em>. Автор персонального фотопроекта <em>«Актеры и образы»</em>,
который был представлен в театральном музее им. Бахрушина и других выставочных площадках Москвы.
</p>
<p className="text-gray-700 text-sm leading-relaxed">
Окончил Санкт-Петербургский Балтийский институт иностранных языков и межкультурного сотрудничества по специальности <em>«актёрское мастерство»</em>,
мастерская Смолкина Б.Г. и О.Г. Кирсановой Миропольской. Был актером Санкт-Петербургского Православного театра <em>«Новое поколение»</em>,
читал со сцены басни и поэзию, а также занимал должность PR-менеджера в театральном центре <em>«Вишнёвый сад»</em>.
</p>
</div>
</div>
</div>
);
}

View File

@ -5,6 +5,7 @@ import { AuthorsSection } from '../components/AuthorsSection';
import { BackgroundImages } from '../hooks/useBackgroundImage'; import { BackgroundImages } from '../hooks/useBackgroundImage';
import { CategoryDescription, CategoryText, CategoryTitles } from '../types'; import { CategoryDescription, CategoryText, CategoryTitles } from '../types';
import { SEO } from '../components/SEO'; import { SEO } from '../components/SEO';
import { MasterBio } from "../components/MasterBio";
export function HomePage() { export function HomePage() {
@ -81,6 +82,7 @@ export function HomePage() {
<div id="featured"> <div id="featured">
<FeaturedSection /> <FeaturedSection />
</div> </div>
<MasterBio/>
<AuthorsSection /> <AuthorsSection />
</div> </div>