Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Новое яркое приключение в волшебной стране пасьянса Эмерлэнде!

Эмерланд пасьянс

Карточные, Головоломки, Пазлы

Играть

Топ прошлой недели

  • solenakrivetka solenakrivetka 7 постов
  • Animalrescueed Animalrescueed 53 поста
  • ia.panorama ia.panorama 12 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
0 просмотренных постов скрыто
12
WoWSab
WoWSab
Лига программистов

Гайд - импортируем CKEditor 5 в Laravel 10 как модуль node.js⁠⁠

2 года назад

Всем привет!

Уже давно настала эра WYSIWYG - редакторов текстов, и при написании наших веб проектов мы конечно же стараемся их использовать по максимуму.

Один из таких редакторов ну просто с сумасшедше-огромной функциональностью - это небезызвестный CKEditor, который недавно (шучу, давно уже) зарелизился замечательной 5-й версией.

Ее мы сегодня и будем импортировать в наш проект на Laravel 10. Скриншотик (и пасхалочка, кто знает тот поймет) внизу.

Как обычно есть 2 пути - простой и сложный.

Простой - это просто прописать в шаблоне

<script src="https://cdn.ckeditor.com/ckeditor5/40.0.0/classic/ckeditor.js"></script>

И активировать его на textarea через ClassicEditor.create().

Но есть нюанс.... что если авторы решат уйти из РФ и ограничит доступ? Или же РКН решит что "ты не пройдешь!" и ... ты не пройдешь. Нужно любить всех своих пользователей, а не заставлять их расчехлять VPN потому что на сайте не работает редактор.

Да и мы ведь серьезный проект пишем! Нам нужно свое! Да еще и желательно с кастомным билдом под наши задачи!

По этому мы пойдем по второму пути - сложному, который делится еще на два.

Назовем их "следовать инструкциям" и "догадаться самим".

Но перед тем как начать - нам нужно собрать кастомный билд с нужными нами модулями и настройками. Что можно спокойно сделать на сайте. Я использовал билд на базе ClassicEditor, выбрал нужные мне модули в том числе и модуль watchdog на будущее (сейчас активировать его в коде я его конечно-же не буду). В общем, качаем билд и распаковываем его в "Новая папка (3)" на рабочке. Он нам понадобится, но несколько позже.

Распакованный архив с кастомным билдом

Распакованный архив с кастомным билдом

Следуем инструкциям.

По инструкции на сайте мы берем скачанный билд, копируем его в папку с проектом в директорию public\assets\ckeditor5, импортируем .js файл в blade шаблон и так-же активируем его через EditorWatchdog() или CreateEditor(). Легко и просто, и в принципе все гайды в интернете по интеграции в Laravel пишут нам что так делать правильно.

Но нас то не обманешь! У нас серьезный проект! И ведь действительно, вдруг нам потом понадобится модуль, который мы не добавили в наш билд? Пересобирать заново? Да ну его! По этому мы пойдем своим путем! Поехали!

Догадываемся сами

К нашему счастью в Laravel встроен замечательнейший инструмент под названием Node.js, который мы и будем использовать. И не только его.

Установка

Идем консолькой в папку с нашим проектом и запускаем (не забудь включить vpn)

npm install --save @ckeditor/ckeditor5-build-classic

Установка

Установка

Сразу нам устанавливается множество зависимостей, однако наш любимый Laravel 10 этот модуль сразу не увидит. Для того чтобы это исправить нам нужно сделать еще кое-что. Поехали интегрировать.

Интеграция

Нам нужно чтобы наш Laravel увидел CKEditor, да собирал его под наши нужды "на лету". Для этого мы будем использовать vite, благо он идет в составе Laravel. У авторов CKEditor для него есть отдельный модуль с названием @ckeditor/vite-plugin-ckeditor5, его и будем использовать. Также нам понадобится модуль @ckeditor/ckeditor5-theme-lark.

Снова консоль, пишем:

npm install --save @ckeditor/vite-plugin-ckeditor5

npm install --save @ckeditor/ckeditor5-theme-lark

Пока ждем установку - наливаем кофе.

Далее ищем в корне нашего проекта файл vite.config.js и вносим в него следующие строки как показано на скриншоте (слева - старый файл, справа - внесенные изменения)

import { createRequire } from 'node:module';
const require = createRequire( import.meta.url );

import ckeditor5 from '@ckeditor/vite-plugin-ckeditor5';

ckeditor5( { theme: require.resolve( '@ckeditor/ckeditor5-theme-lark' ) } ),

vite.config.js

vite.config.js

Конфигурируем

Помните ту конфигурацию, что мы делали на сайте CKE? Она то нам сейчас и понадобится.

Открываем Новую папку (3) и в подпапке src находим файл ckeditor.ts. Это файл с настройками нашего билда. Копируем его в папку с проектом, в директорию resources/js.
Также из папки samples копируем style.css в resources/css.
И дополнительно создаем файлик editor.js - его мы и будем встраивать в наш шаблон.

Содержимое editor.js

import ClassicEditor from './ckeditor';

ClassicEditor.Editor
// Note that you do not have to specify the plugin and toolbar configuration — using defaults from the build.
.create( document.querySelector( '#editor' ), {
language: 'ru',
removePlugins: [
'MediaEmbedToolbar'
]
})
.then( editor => {
console.log( 'Editor was initialized', editor );
} )
.catch( error => {
console.error( error.stack );
} );

Для наблюдательных - я специально не использовал watchdog здесь. Импортировать его я планирую потом.

Дальше нам нужно загрузить недостающие модули.

Открываем редактором ckeditor.ts и видим вверху множество импортов.

Открываем папку "node_modules/@ckeditor" внутри проекта и ищем недостающие модули. Если такие есть - устанавливаем их через npm install --save %имя_модуля%.

В дальнейшем есть шанс получить следующую ошибку от TailWindCSS (при запуске npm run dev)

[vite:css] Nested CSS was detected, but CSS nesting has not been configured correctly.Please enable a CSS nesting plugin *before* Tailwind in your configuration.

Она вызывается из-за того, что мы используем кастомный css для ckeditor

Чтобы этого не происходило, нам необходимо в файле postcss.config.js в корне нашего проекта добавить следующие строки:

'postcss-import': {},
'tailwindcss/nesting': {},

как на скриншоте

postcss.config.js

postcss.config.js

Почти все

Нам осталось только в нашем шаблоне между тегов <head> добавить

@Vite(['resources/js/editor.js', 'resources/css/editor.css'])

И теперь любой <div> или <textarea> с указанием id="editor" будет вызван с редактором CKEditor5.

Запускаем проект через npm run dev и радуемся полученному результату!

Результат

Результат

Результат

А Вы заметили пасхалочку на скриншоте?

Все что вам осталось - это настроить дизайн редактора в css файле.

Ну и как-же без ложки дегтя - почему-то конфигурация "language: ru" не срабатывает и редактор остается английским. Возможно не хватает какого-то модуля или же что-то необходимо донастроить. Пока еще не разобрался, но в целом на данном этапе разработки это не сильно критично. Если у Вас есть идеи - welcome!

Update: С языком разобрался. Действительно его необходимо было имортировать. Для этого в ckeditor.ts необходимо вставить строку после импорта { ClassicEditor }

import '@ckeditor/ckeditor5-build-classic/build/translations/ru';

Update2: Также нашел проблему при вставке видео с внешнего источника, например Youtube. В редакторе оно вставляется, а вот в пост не переносится. Лечится доп конфигом там-же в ckeditor.ts в секцию defaultConfig

mediaEmbed: {
previewsInData: true
}

Исправленная локализация

Исправленная локализация

Надеюсь что данный гайд поможет Вам в проектах.

Если вы хотите немного потрындеть, или быть может знаете Laravel или например умеете верстать, ну или просто у вас есть желание как-нибудь помочь с разработкой проекта, милости прошу в мою потрынделку.

В кратце - да, старый добрый, с блекджеком и шлюпками.

Всем спасибо!

Показать полностью 7
[моё] Гайд Инструкция Программирование PHP Javascript Nodejs Laravel Длиннопост Разработка Веб-разработка IT
3
Linkoln22Teodor

Нужна помощь с middleware в laravel⁠⁠

2 года назад
Проблема в том, что guest не работает. Ввожу в адресной строке на /login, а перенаправления не происходит. При этом работает auth. Кто нибудь знает в чем может быть дело?

Проблема в том, что guest не работает. Ввожу в адресной строке на /login, а перенаправления не происходит. При этом работает auth. Кто нибудь знает в чем может быть дело?

[моё] Laravel PHP Помощь Web-программирование
12
Ragnoboy
Ragnoboy
Лига программистов

Продам проект v1.1: Сервис подарков⁠⁠

2 года назад

Несколько дней назад я представил свой новый проект - сервис по сборке индивидуальных подарков.

Начальная версия сайта вызвала небольшой интерес с вопросами и замечаниями. Основной из них - непонятность работы сервиса. Позвольте поделиться, что я изменил. Так сайт выглядел вначале.

Сервис подарков v1.0

Сервис подарков v1.0

Я задался вопросом: как сделать главную страницу максимально информативной и удобной для пользователей? После некоторых размышлений я решил добавить слайды с подробными пояснениями. Это, в идее, должно донести информацию о сервисе и его возможностях до посетителей.

Сервис подарков v1.1

Сервис подарков v1.1

Однако, мой опыт в разработке подобных проектов ограничен, и я был бы признателен за вашу помощь и рекомендации. Какие дополнительные функции или улучшения я мог бы внести, чтобы сделать проект более понятным и простым в использовании? Все ваши комментарии я прочитаю и постараюсь реализовать в ближайшее время.

Сам сервис подарков: gift-secrets.ru

Вместе мы можем сделать этот сервис действительно уникальным и полезным для всех. Спасибо за вашу поддержку и советы!

Показать полностью 1
[моё] IT Программирование Сайт Подарки Проект Услуги Laravel
7
4
Ragnoboy
Ragnoboy
ИТ-проекты пикабушников

Продам проект или загляни в мир подарков⁠⁠

2 года назад

Я решил создать уникальный сервис, который объединяет два замечательных аспекта: возможность заказа подарка и незабываемый сюрприз. Представьте, что вы можете заказать подарок для себя или для близкого человека, не зная, что именно находится внутри. Это могут быть подарки на любой праздник, важное событие или даже для поднятия настроения.

"Эльф" - это живой человек, любой из вас. Он исполнитель в нашем сервисе. Когда вы размещаете заказ, "Эльф" берется за его выполнение за определенную часть бюджета. Он имеет информацию о итоговой сумме, который вы укажете, и собирает уникальный подарок, придумывая его содержание так, чтобы каждый подарок стал уникальным и незабываемым.

Главная страница сайта <!--noindex--><a href="https://pikabu.ru/story/prodam_proekt_ili_zaglyani_v_mir_podarkov_10628953?u=http%3A%2F%2Fgift-secrets.ru&t=gift-secrets.ru&h=a0ffb331123abb8b9f5ad449f705a7ab6ad17b86" title="http://gift-secrets.ru" target="_blank" rel="nofollow noopener">gift-secrets.ru</a><!--/noindex-->

Главная страница сайта gift-secrets.ru


Мой проект был создан одним разработчиком, мной, с целью исследования возможностей Laravel 9. Подходя к задаче серьезно, я потратил четыре месяца на его разработку. Один из интересных экспериментов для меня, была локализация на английский язык, что дает пользователям возможность пользоваться сервисом на разных языках. Также я создал скрипт для легкости добавления других языков, хотя этот функционал не включен в итоговую версию проекта.

Языковые пакеты

Языковые пакеты

Проект был оптимизирован на всех уровнях: начиная с сжатия и обработки изображений и заканчивая работой с логикой. Я продумал логику работы сервиса, хотя, возможно, не без ошибок. Важно отметить, что проект абсолютно бесплатный и не имеет комиссий, так как не участвует в сделках между заказчиком и Эльфом.

https://gift-secrets.ru/

Сайт уже размещен на хостинге, оплаченном на год, и я надеюсь, что он найдет своих пользователей. Но если проект не получит поддержку, то, к сожалению, придется попрощаться с ним. Думаю, в этом случае сделать исходный код проекта открытым на GitHub.

В будущем планируется интеграция с сообществом во ВКонтакте. Это позволит автоматически публиковать идеи подарков, успешно выполненные заказы с указанием стоимости и содержания подарков. Я верю, что это станет отличным дополнением для тех, кто, как и я, иногда сталкивается с вопросом "Что подарить?".

Сообщество во ВКонтакте

Сообщество во ВКонтакте

Пожалуйста, посетите сайт, попробуйте его и поделитесь вашими впечатлениями. Если у вас есть время, буду благодарен за обратную связь и информацию о возможных ошибках. С нетерпением жду ваших сообщений и надеюсь, что наш проект станет частью ваших праздников и радостей.

Показать полностью 3
[моё] IT Интересное Создание сайта Laravel Проект Сайт Программирование Подарки Онлайн-сервис Длиннопост
8
37
Neur0Z
Neur0Z

Издательство BHV - стоит ли доверять? (нет)⁠⁠

2 года назад

Всем привет! Хочу предостеречь вас от покупки книг в издательстве bhv (как минимум на основе рейтинга или отзывов).

Недавно решил приобрести книгу на сайте этого издательства. Книга посвящена web-разработке на Laravel. У меня была книга Laravel 8 от этого же автора (кстати вполне не плохая).

Вышла новая книга Laravel 9. Решил приобрести и сравнить что нового появилось (может что-то упустил в процессе самостоятельного изучения). Каково же было мое удивление, когда ~80% книги это был копипаст предыдущей части. Более того, в обоих книгах приведена ссылка на пример простого демонстрационного проекта (и эта ссылка одна и та же, на один и тот же код). Т.е. как будто абсолютно ничего нового в самом движке не появилось (на самом деле это не так).

Ну ладно, код рабочий, да и бог с ним. Начал читать дальше. И вот что самое плохое: есть разделы, которые просто скопированы с предыдущей книги, и которые просто не так работают в более новом Laravel 9. Т.е. копипаст неактуальной информации.

Поэтому я решил оставить соответствующий комментарий на сайте издательства (потому что под данным товаром их нет). Текст ниже.

В целом книга хорошая, но в большей степени – это копирка книги Laravel 8 от того же автора.
Некоторая информации, на которую стоило бы обратить внимание – просто отсутствует. Например что такое vite, каким им пользоваться или как вернуться к webpack.
Некоторая информация вообще не соответствует действительности (опять же потому что большая часть книги – это просто копирка предыдущей Laravel 8). Например, работа с электронной почтой: при создании класса описывается код с функцией build, которой вообще нет в Laravel 9 (в ней используются другие функции: envelope, content, attachments).
В общем местами книга очень разочаровала (особенно как владельца предыдущего издания – Laravel 8)

Отзыв был отправлен на модерацию.

Прошло 2 месяца, и я решил посмотреть какие еще отзывы появились на сайте издательства bhv. Оказалось, что отзывов по прежнему нет. Вообще никаких! Думаю как же так? Авторизовываюсь под своим логином, и смотрю, что мой отзыв до сих пор (по сей день) висит на проверке.

Я написал письмо в издательство

> Здравствуйте!
> Подскажите, почему вы не публикуете отзывы о приобретенных товарах? Разве это справедливо по отношению к вашим клиентам и будущим покупателям?

На что получил вот такой ответ:

Здравствуйте, Михаил.

Мы принимаем к сведению замечания наших клиентов.
Книги пишут авторы, у них свой взгляд на мир, мы только помогаем автору донести свои мысли до читателя.
Процесс создания книги только кажется простым, в нем принимают участие много людей.
При этом нам приходится находить компромис между качеством и стоимостью.
Книга вещь многогранная, сложная.  Кому-то нравится простота, кого-то возмущает примитивные рассуждения автора, кому-то не повезло с качеством товара, кто-то возмущается всегда и всем.
Если замечание конструктивное, по делу, если в наших силах устранить проблему - мы это делаем.
Но публиковать все отрицательные отзывы не считаем возможным, по разным причинам.

PS. В этом году издательству БХВ исполнилось 30 лет.
За годы работы было выпущено около 15 млн. книг.

"Если замечание конструктивное, по делу, если в наших силах устранить проблему - мы это делаем. Но публиковать все отрицательные отзывы не считаем возможным, по разным причинам." - Что мы имеем в итоге: замечание конструктивное, но они не в силах устранить проблему. А негативный отзыв мы не будем писать, потому что он отпугнет и без того не большое количество потенциальных покупателей.

Получается, что я купил товар, и не могу оставить о нем свое мнение...
Вот такой вот "бизнес по-русски". Зато нам 30 лет и 15 млн книг с неизвестным содержанием. И кто знает сколько млн отзывов было скрыто (не опубликовано) просто из соображений маркетинга.

UPD. Получил сегодня еще письмо от издательства

Здравствуйте, Михаил!
Пересылаю ответ автора

Похоже, автор письма пользуется более новой версией Laravel 9, чем
описана в моей книге.

В Laravel 9 разработчики затеяли переход со сборщика проектов Webpack на
Vite и о с одного отправщика электронной почты на другой. В старой
версии Laravel 9 (её номер — 9.9.0), которую я описывал к своей книге,
ещё использовались Webpack и старый отправщик, а в новых версиях — уже
Vite и новый отправщик.

А возможно, автор письма пользуется ещё более новыми версиями Laravel —
10 или 11.

Отсюда и проблемы с несовместимостью.

Приятно, что ответили. Отзыв о книге пока не опубликован. Пойду попробую написать отзыв в немного другом ключе с оговоркой на используемую подверсию в книге.

Показать полностью
IT Книги Издательство Laravel Программирование Бизнес по-русски Текст Длиннопост
33
Baskovsky
Baskovsky
Лига программистов
Серия Айтишники

PHP - выбор начинающего программиста⁠⁠

3 года назад

Ведущий Денис Басковский вместе с веб-программистом Дмитрием Горяевым обсуждают язык ПХП. Дмитрий - программист со стажем работы более 12 лет. Начиная свою карьеру веб-мастером, он с тех пор продолжает совершенствовать свои знания по языку PHP. В интервью вы узнаете положение дел в мире пхп, узнаете историю языка, подробнее узнаете про фреймворки Laravel, Yii и Symfony. В конце видео проведем небольшой блиц-опрос, где узнаем ответы на популярные вопросы в мире PHP-разработки.

[моё] YouTube Интервью IT Программирование PHP Программист Веб-разработка Yii Yii2 Laravel Видео
4
7
xfides
Лига программистов

Вопрос по composer php. Помогите⁠⁠

3 года назад

Привет всем. Знаю, что спрашиваю не на совсем профильном ресурсе. Но вдруг мне повезет. И мне подскажут ответ, над которым я бьюсь уже неделю.

Краткая предыстория вопроса. Все началось с того, что мы с другом изучали Laravel. И все шло хорошо, пока чей-то цепкий взгляд не заметил одну удивительную для нас штуку. Оказывается, не все зависимости, которые использует Laravel установлены в папку vendor пакетного менеджера composer. Я уже даже пожалел, что кто-то на совместных занятиях у нас такой зоркий.


Начали выяснять, как Laravel работает , если установлены не все зависимости. Выяснили что зависимости-то как раз есть все. Просто часть из них скрыта в исходном коде фреймворка под директивой "replace" composer.json схемы (ссылка -> https://getcomposer.org/doc/04-schema.md#replace ). Мы кое-как вникли в смысл этой директивы. Но остался небольшой нюанс.

Смысл директивы "replace", как мы ... эээ смогли понять. Разработчик продукта имеет право воспользоваться готовым пакетом не как зависимостью (через require), а скопировать  \ форкнуть код пакета напрямую в свой разрабатываемый код. Зачем так вообще делать - отдельный вопрос. Мы не особо понимаем. Но раз так делают, значит бывает нужно.


Директива "replace" приказывает пакетному менеджеру composer не выкачивать пакет из удаленного репозитория, а просто запоминает, что этот пакет уже выкачан самим разработчиком. Естественно, разработчик в своем коде должен предусмотреть не тупое копирование кода, а все-таки правильное подключение скопированного кода. Ну то есть, например, хотя бы подключить namespace скачанного пакета в автозагрузку.


Теперь сам вопрос. В директиве "replace" мы указываем название пакета, над которым перехватываем контроль вместо composer. Но также нужно указать версию заменяемого пакета. И практически везде вместе определенной версии стоит указание "self.version"

"replace": {

"illuminate/auth": "self.version",

...

}


Что означает такое ограничение версии как "self.version"? Как composer будет определять единственную конечную версию пакета, если какой-то 3-party пакет запросит тот же illuminate/auth, но вполне определенной версии (см пример ниже)?


3-party пакет разрабатываемого проекта, подключенный как обычная зависимость через require, внутри себя требует ...

"require": {

"illuminate/auth": "8.83.1",

...

}


Google, к сожалению, ничем не помогает. Мы сейчас разбираем исходный код composer. Но там довольно глубокая кроличья нора. Мы уже готовы признать, что это тупик, и нам не найти ответа на этот вопрос. Помогите выиграть нам в этом моменте, не хочется сдаваться.

Показать полностью
[моё] PHP Laravel Программирование IT Текст
4
DmitriyLucius
Лига программистов

Laravel 8. Передать данные в шаблон-родитель⁠⁠

3 года назад

Всем доброго времени суток.


Я сравнительно недавно стал изучать ларавел 8, и пока некоторые вещи я без сторонней помощи реализовать не могу.


Не могли бы вы поделиться советом: как передать данные модели в шаблон-родитель в laravel 8?


Шаблон-родитель имеет общие секции для всех страниц: шапка и футер, которые имеют меню-навигацию. Это меню будет динамическим, что означает , что я буду добавлять и удалять пункты через админ-панель.


Для меня это очень ценный опыт в плане становления laravel-разработчиком и такие уловки как "просто размести в шапке готовую html - разметку меню и не парься" - просто игнорирование проблемы. Ибо акцент я стараюсь делать на качество кода.:)


Мне посоветовали сделать следующее:

1. сделать базовый контроллер, от которого наследовать остальные,

2. в базовом контроллере доставать меню и внедрять в слой, от которого наследовать остальные страницы, где нужно меню


Вот как сейчас выглядит мой Базовый контроллер:

class PageController extends Controller

{

// public function __construct () {

public function __invoke () {

$menu=Menu::where('active', 'Y')->get();

/*front/layout.blade.php - это шаблон родитель*/

/*Правильно ли я передаю данные? меню, к сожалению, не появляется*/

return view('front.layout',['menu'=>$menu]);

}

}


Как правильно написать Базовый контроллер?

Показать полностью
[моё] Программирование Web-программирование Laravel Текст
14
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии