А теперь берем уже готовую функцию генерации пароля и пишем скрипт для восстановления или создания нового пароля для пользователей вашего сайта.

Скрипт восстановления пароля

Как обычно пишется скрипт?

Как всегда составляется поэтапная схема, что мы должны сделать по шагам. Все происходит в одном файле, reminder.php

1. Запускаем скрипт, только при наличии определенной переменной, например $action;

2. Для запуска процесса генерации пароля, пользователь указывает email адрес $_POST[`ema‘l`]; Для упрощения кода присвоим данное значение переменной $email.

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

4. Ищем в базе данных, в нашем случае в таблице users пользователя с таким почтовым адресом. Если нет, выдаем ошибку, что такого адреса в базе нет, и прекращаем работу скрипта.

5. Пользователь с таким адресом в базе есть, идем дальше и запускаем функцию генерации нового пароля. Также по адресу емайл получаем из базы уникальный id пользователя и пишем в переменную $id;

В этой статье мы будем изучать генераторы, которые обеспечивают простой способ реализовать простые итераторы без накладных расходов и сложности интерфейса Итератора.

Как работают генераторы?

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

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

Руководство по PHP гласит: "Когда функция генератора вызывается, она возвращает объект, который может перемещаться." Это объект внутреннего класса генератора и реализует интерфейс итератора таким же образом. Перебирая этого объекта, PHP называет генератор каждый раз, когда ему требуется значение. Это состояние сохраняется только тогда, когда требуется следующее значение.

Вывод вышеуказонного кода будет:

Генератор начался

Приводится 0

Приводится 1

Приводится 2

Приводится 3

Приводится 4

Генератор закончился

Наш первый генератор

Генераторы не новая концепция, и уже существуют в таких языках, как C# , Python , JavaScript , и Ruby , а, как правило, идентифицируются по их использованию yield ключевого слова. Ниже приведен пример в Python :

Def file_lines(filename): file = open(filename) for line in file: yield line file.close() for line in file_lines("somefile"): .............

Давайте перезапишем генератор Python -а в PHP . (Отметим, что оба фрагмента не выполняют никакого вида ошибочной проверки.)

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

Возвращение ключей

PHP iterators состоят из пар ключевого/значения. В нашем примере, только значение было возвращаемым и поэтому ключи были числовыми (числовые ключи бывают по умолчанию). Если вы желаете вернуть ассоциативную пару, просто измените yield для включения ключа, используя синтаксис массива.

$line; ... } foreach (file_lines("somefile") as $key => $line) { ............. } ?>

Введение значения

yield не только возвращать значения, он также может получать значения из вне. Это делается путем вызова метода send() генератора объект со значением, если вы хотите передать и значение. Затем это значение может использоваться в вычислениях или делать другие вещи.

send("stop"); } echo "{$v}n"; } ?>

Вывод будет следующим:

Сохранение памяти с помощью генераторов

Генераторы удобны, расчета больших наборов, и если вы в то же время не хотите выделить память для всех результатов, или когда вы не знаете, вам нужны будут все результаты. Из-за способа обработки результатов, объем памяти может быть сведена к минимуму путем выделения памяти только для текущего результата.

Представьте себе функцию file() , которая возвращает все строки файла в виде массива. Управляя простой точкой отсчета(масштабом) для file() и наш демонстрационный пример функции file_lines() , каждый использующий те же самые случайные 100 текстовых файлов параграфа, используя Lipsum , показали, что функция file() использовала до 110 раз больше памяти, чем генератор.

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

Если вы что-нибудь слышали об итераторах, тогда вы, скорее всего, знаете, что итерация - очень важная концепция для мира программирования, но имплементация необходимых интерфейсов для создания объектов-итераторов может быть весьма хлопотным занятием из-за большого количества шаблонного кода, который необходимо написать для работы итератора. Но с релизом PHP 5.5 к нам наконец-то пришли генераторы!

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

Как работают генераторы?

Согласно Википедии генератор “очень похож на функцию, которая возвращает массив, так как генератор имеет входные параметры, его можно вызвать и он генерирует последовательность значений”. В общих чертах генератор - это обычная функция, но вместо возврата одного значения она выдает столько значений, сколько от нее может потребоваться. Генератор выглядит как функция, но ведет себя как итератор.

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

Руководство PHP гласит: “Когда вызывается генератор, он возвращает объект, который может быть проитерирован”. Он является объектом внутреннего класса Generator , который имплементирует интерфейс Iterator , и ведет себя, как однонаправленный итератор. Пока вы проводите итерацию над объектом, PHP вызывает генератор каждый раз, когда ему нужно получить значение. Состояние сохраняется каждый раз, как генератор выдает значение, так что в следующий раз, когда PHP затребует значение, генератор восстановит свое предыдущее состояние.

Данный код выведет следующее:

The generator has started Yielded 0 Yielded 1 Yielded 2 Yielded 3 Yielded 4 The generator has ended

Наш первый генератор

Генераторы - не новый концепт, они уже есть в таких языках, как C#, Python, JavaScript и Ruby (счетчики), их обычно можно определить по использованию ключевого слова yield . Данный код - пример на языке Python:

Давайте перепишем образец генератора Python на языке PHP. (заметьте, что оба куска кода не заботятся о проверках ошибок).

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

Возврат ключей

Итераторы в PHP состоят из пар “ключ/значение”. В нашем примере мы возвращаем только значение, а ключи в этом случае будут числовыми (ключи по-умолчанию числовые). Если вам необходимо вернуть ассоциативные пары - просто измените формат оператора yield так, чтобы он включал и ключ, используя синтаксис массивов.

Внедрение значений

Оператор yield не только возвращает значения - он может также принимать значения извне. Это делается путем вызова метода send() у объекта генератора с передачей необходимого значения в виде параметра. Это значение может быть использовано в вычислениях или других операциях. Метод передает значение в генератор как результат выполнения yield, и возобновляет выполнение.

send("stop"); } echo "{$v}n"; }

Вывод будет следующим:

Экономим память с помощью генераторов

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

Представьте результат работы функции file() , которая возвращает все строки читаемого файла в виде массива. Если сравнить результаты работы функции file() и нашей функции file_lines() над одним и тем же файлом со 100 случайными параграфами текста, то функция file() будет использовать примерно в 110 раз больше памяти, чем генератор.

Заключение

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

Потенциал социальных медиа чрезвычайно высок и, несмотря на наличие таких грандов в этой области как Facebook, Twitter или ВКонтакте, спрос на создание подобных, пусть и не столь глобальных, сетей не ослабевает.

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

Вы уже поняли, что речь идет о темах для Wordpress , но темах несколько спецефических, поскольку сама сфера - социальная коммуникация и средства общения - предявлет свои, определенные требования. Соответственно, требуемые темы должны быть адаптированы к работе с платформой BuddyPress.

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

Evolve WordPress Theme

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

Farben Basic BuddyPress Theme

Ни в чем не уступающая предшествующей теме - тема Farben . Такая же богатая функциональность и гибкость, различные типы сообщений, встроенные редактор CSS, «пипетка» (инструмент для выбора цвета) и великолепный слайдер . А также полная поддержка различного медиа-контента и галереи изображений .

Стоимость: базовая версия - бесплатно; одиночная лицензия - $69; подписка - $99 в год

Quest

Quest - новичок в большой семье тем для Wordpress, но уже заслужил признание пользователей благодаря своей богатой функциональности и тщательной проработке. Исходные коды темы распространяются под открытой лицензией, однако вам не придется их изучать - тема имеет мощный drag-and-drop редактор , который способен полностью избавить вас от ручной правки кода.
Дизайн темы и подбор шрифтов безупречен. Quest способна проявить себя в самых разных сферах, в том числе в связке с BuddyPress, так что вы, несомненно, будете удовлетворены ею. Если же базовой функциональности будет недостаточно, то можно приобрести Quest Plus (от $49,99)

Arcade Basic

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

Ward

Еще одна великолепная тема, которая полностью удовлетворить ваши запросы, если вы ищете бесплатную Wordpress тему с поддержкой BuddyPress . Создана на базе Bootstrap и полностью раскрывает все его возможности. В своем составе имеет неплохой jQuery слайдер .

Make

Рассмотренные выше темы безусловно хороши, но среди них Make занимает особое положение. Этот своеобразный бриллиант в нашей коллекции имеет более 340 тыс. загрузок и пользуется заслуженной популярностью. Drag-and-drop редактор позволяет конструировать страницы, используя различные варианты сетки, боковые панели, баннеры , всевозможные медиа-материалы и прочее.

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

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

Как сделать социальную сеть на WordPress?

Разработан плагин теми же людьми, что придумали сам движок. Состоит Buddypress из нескольких модулей, поэтому можно не просто сделать социальную сеть, а разработать необычный проект с её элементами. К примеру, можно преобразовать свой блог, добавив на него несколько оригинальных функций.

Несмотря на многофункциональность, получаемую с помощью этого продукта, он предельно прост в использовании. Если вы раньше пользовались WordPress, то без труда установите расширение на свой движок. Работа с Buddypress предоставит вашему проекту следующие возможности:

Расширенные профили, в которые можно добавлять много разной информации, друзей, группы, ленты активности и многое другое;

Удобный обмен сообщениями между участниками;

Каждому будут доступны настройки аккаунта (например, можно включить оповещения по Email);

Система взаимосвязей (друзья), отлично проработана и позволяет следить за событиями знакомых;

Сообщества можно будет открывать, за счет запуска групп;

У всех пользователей будет своя лента событий, куда добавляются записи из групп и профилей;

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

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

Как пользоваться Buddypress?

Установка проводится также как и добавление любых других плагинов. Когда выполните её и активируете расширение, в меню будет доступен новый пункт:

После перехода к пакету расширений, вы увидите список из 9 отдельных плагинов, отвечающих за разные составляющие социальной сети:

Чтобы вам было проще в этом разобраться, предлагаем ознакомиться, какой из компонентов за что отвечает:

  1. Расширенные настройки профилей.
  2. Обычная настройка аккаунта.
  3. Отвечает за систему добавления друзей.
  4. Приватные сообщения.
  5. Лента новостей.
  6. Группы и сообщества.
  7. Активность на сайте.
  8. Главный компонент Buddypress (его ядро).
  9. Члены сообщества (тоже обязательный плагин.

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

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