Хай март!


Визивиг Summernote - как загрузить картинку в каталог на сервер?

2017-07-27 18:40:34

Итак, по совету Коли поставил симпатичный wysiwyg-редактор Summernote. Поставить-то я его поставил, и вроде даже работает без гемороя, единственная загвоздка, загрузка картинок. Вот я сейчас гружу картинку:

Эта картинка идет прямо в базу данных через http в виде такого кода. А мне надо чтобы шло в виде файла. Как это победить я пока не понял. Тут нужен судя по-всему JavaScript. Либо внешний, либо в код файла summernote.js вносить правки. Но JS я пока не изучал, мне сложно сориентироваться. Ладно, попутно как-то решу проблему со временем.

Если говорить простым языком, что счас делает визивиг? Получает файл изображения и конвертирует его в формат для передачи по http. В таком формате прямо и сохраняет в базу.

А что надо? Надо передать файл в каталог /images и сохранить под тем же названием (или под сгенерированным), а в код вставить тег со ссылкой на картинку.

UPD. А блин, он мне еще и шрифт поменял, засранец!

Как я делал постраничный вывод постов из базы данных MySQL (пагинатор)

2017-07-27 16:06:32

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

Сначала я составил план действий - что мне надо было сделать.

Вывод содержания на 1 страницу 

Для главной страницы нужен такой SQL запрос, который будет брать 10 последних постов из таблицы post, а не все сразу.

Пагинатор

1. Надо посчитать сколько всего строк в базе

2. Разделить на 10 (т.к. я хочу выводить по 10 на страницу)

3. Округлить в большую сторону до целого - получить число страниц n

4. Сделать вывод ссылок на каждую страницу типа i=от 0 до n; i++ 

(Когда страниц станет очень много, пагинатор надо будет переделать, чтобы он не выводил все ссылки на 1 страницу)

Вывод по 10 постов на каждой странице 

Сначала создадим страницы вида  mozgovik.com?page=1

если page=1 или NULL, загружаем первые 10 строк

если page=2, загружаем из базы посты 11-20

если page=3, загружаем из базы посты 21-30 и тюд.

===============================================

Итак, задачу сформулировал, теперь решение. Найти SQL запросы для решения первых двух проблем оказалось несложно: SQL запрос типа

SELECT * FROM posts LIMIT 10 позволяет выбрать 10 последних постов, где post - это название моей таблицы с постами. А запрос SELECT * FROM posts LIMIT 20,10 позволяет пропустить 20 постов и выбрать следующие 10. Изящно и просто оказалось. 

Чтобы посчитать число постов, надо выполнить вот такой SQL запрос:

SELECT COUNT(*) FROM posts

Чтобы проверить, что выдают все эти запросы, я использовал HeidiSQL и вводил запрос во вкладке "Запрос"на страничке своей базы данных и смотрел что он отдает. 

Теперь как я получаю переменную число постов в PHP код? Вот так:

$result=$pdo->query("SELECT COUNT(*) FROM posts");

$mmm=$result->fetch();

echo $mmm[0];

Код самого пагинатора получился таким:

(Этот код выводит номера страничек в подвале главной страницы)

Код, который всталвяет из базы нужные посты на нужную страницу:

 

В общем, в этот раз, все довольно быстро сделалось. Потратил всего 2 часа уже, с минимальным числом ошибок

Как установить quill, чтобы получить нормальный HTML код на выходе?

2017-07-26 22:15:21

В общем, я решил не смотреть даже на TinyMCE, а взять более симпатичный и бесплатный визивиг Quill. 

https://quilljs.com

Пример начала работы тут: https://quilljs.com/docs/quickstart/

Пример работы с формой тут: https://quilljs.com/playground/#form-submit 

Где-то час возни и я получил результат. Не без геморра конечно.

Quill цепляется к div'у, а мне надо было прицепить его к textarea, т.к. ток она передает текст в базу через name="text". Я нашел JavaScript код в примерах, который эту проблему решал. 

Но главная проблема оказалась в том, что QUILL передает данные из формы в виде какой-то хрени

То есть вместо правильно отформатированного HTML текста на выходе пост опубликовался примерно такой:

{"ops":[{"insert":"ваываыва "},{"attributes":{"underline":true},"insert":"ываывавыа"},{"insert":" "},{"attributes":{"underline":true},"insert":"ываываывавыа"},{"attributes":{"list":"bullet"},"insert":" "},{"attributes":{"list":"ordered"},"insert":" "}]} 

Что это?

Как сделать так, чтобы Quill нормальный html в базу отправлял?:)) 

 upd. Картинку он передает в формате:

{"image":"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAYEBQYFBAYGB ... и т.д.

Это еще что такое?:)) 

Интуитивно я догадываюсь, что именно в таком виде картинки и файлы передаются через http протокол. Но как такую картинку сохранить в папку images и автоматом выдать ей норм. адрес я пока не знаю

!!!NEED HELP!!! 

Добавил кое-чего в плане защиты

2017-07-26 11:26:02
Дабы защитить базу от несанционированного доступа, врубил кой-какую проверку, чтобы избежать сторонних подключений. Теперь пишу пост чтобы проверить, не поломал ли чего?

Как выводить данные из базы данных на страницу с уникальным URL адресом?

2017-07-26 00:44:01

Где-то примерно после 3 часов поисков (2 часа в книге и 1 часа в яндексе) я нашел ниточку. Решение оказалось очень простым и было указано в 1-м ответе на страничке форума:

http://www.cyberforum.ru/php-database/thread1148626.html

(пока я не знаю как мне перенастроить мой примитивный визивиг tinyMCE, чтобы он умел читать ссылки) 

В чем собственно было решение? Да, оно пока не супер изящное в плане красоты адреса URL, то все же позволяет решить задачу - чтобы у каждого поста был свой уникальный адрес.

Решение-подсказка по сути всего в самой одной строчке:

mozgovik.com/post.php?id=27

То есть достаточно создать всего один документ post.php

Которому методом GET передается переменная id

Мы эту переменную получаем в PHP всего 1 строкой:

$id=(int)$_GET["id"]; 

Дальше я уже и сам допер что как... 

Копируем код страницы index.php к-я сейчас выводит все посты подряд

Меняем немного SQL запрос на вот такой:

$query = "SELECT * FROM posts WHERE post_id = '$id'";

(этот запрос выбирает из базы строку с post_id, который мы передаем через url в виде числа)

Дальше из index.php я убираю цикл, который выводил все посты друг за другом. 

Ну и чтобы ссылки на посты были на главной, я сделал заголовки ссылками немного подправив код заголовка:

echo '<div class="text"><a href="/post.php?id='.$mmm['post_id'].'"><h2 class="text">'.$mmm['post_header']."</h2></a>";

ПОТРАЧЕНО! 

=====================

UPD. Мне нравится что любая конкретная задача в конечном счете решается за какое-то конечное время. Сегодня вот на эту хрень потратил в общей сложности часа 4, заодно узнав мельком про шаблоны MVC и smarty. Плюс конечно реальный кайф, когда все-таки задача решается положительно)

=====================

UPD2. Что теперь надо сделать в первую очередь?

1. Постраничность на главной, чтобы все не шло одной простыней

2. Найти адекватный визивиг, чтобы можно было картинки грузить автоматом

3. Сделать новую таблицу для комментариев с привязкой в посту. 

Как создать отдельный URL адрес для каждого поста?

2017-07-25 19:35:35

Сейчас мне надо прицепить комментарии к посту. Но для этого надо сделать у каждого поста свой отдельный URL адрес. Два часа я потратил читая 50 главу про шаблоны PHP в книге "PHP7 в подлиннике", но не нашел ответа на свой вопрос. Прежде чем читать, я конечно просил Вову подсказать, но он тоже чето непонятное промычал.

Что же надо сделать?

Чтобы каждый пост имел свой отдельный URL адрес.

Например mozgovik.com/posts/13

Ну или хотя бы mozgovik.com/posts/13.php

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

"Как создать отдельный URL адрес для каждого поста?" 

Предлагаю тему для изучения

2017-07-25 17:05:47
Как добавить аутентификацию, или .htaccess

bla

2017-07-25 17:04:34
yoba

Тестируем форматирование TinyMCE

2017-07-23 21:40:12

Эта запись написана из только что накаченного на мозговик визивига (визуальной панели редактирования).

Теперь можно не парится и свободно вводить символ '. Визивиг сделает сам преобразование в HTML.  

 

 

Надо еще понять как иконки включать в этом визивиге. Чего сейчсас тут не хватает?

 

 

План: Что делаем дальше?

2017-07-23 17:16:17
1. Надо накрутить визивиг на форму добавления поста, чтобы вручную не хардкодить все теги.
2. Вероятно визивиг решит проблему загрузки картинок на сервер. Ее тоже надо сделать
3. Надо сделать постраничность вывода постов, чтобы все не валилось на главную
4. Надо присвоить каждому посту свое уникальное имя
5. Решить проблему ввода в базу спецсимволов:


12345