user_model.php
class User_model extends CI_Model{
function get_fullname_by_username($username){
$query=$this->db->select('user_first_name,user_last_name')->where('user_name',$username)->get('user');
if($query->num_rows()==0){
return FALSE;
} else {
return $query->row();
}
}
}
post_model.php
class Post_model extends CI_Model{
function input_post($content,$privacy==FALSE){
$this->load->library('privacy');
$this->load->helper('post');
$uid=uid();//user id based on sessions
if($privacy==FALSE){
$privacy=$this->privacy->post_privacy($uid);
} else {
$privacy=$privacy;
}
$content=mention($content);
$input=array('post_uid'=>$uid,'post_content'=>$content,'post_privacy'=>$privacy);
if($this->db->insert('posts',$input)){
return $this->fetch_single_post_data($this->db->insert_id());
} else {
return FALSE;
}
}
function fetch_single_post_data($post_id){
$query=$this->db->select('id,post_uid,post_content,post_privacy,post_created')->where('id',$post_id)->get('posts');
if($query->num_rows()==0){
return FALSE;
} else {
return $query->row();
}
}
}
post_helper.php
function get_mention_name($username){
$username=strtolower($username);
$CI=&get_instance();
$CI->load->model('user_model');
$name=$CI->user_model->get_fullname_by_username($username);
if($name==FALSE){
return "@".$username;
} else {
return "<a href=\"/profile/{$username}.html\">{$name->user_first_name} {$name->user_last_name}</a>";
}
}
function mention($post_content){
return preg_replace_callback("REGEX","get_mention_name",$post_content);
}
Прежде всего, английский не мой родной язык,Поэтому, пожалуйста, если моя грамматика плохая, простите меня.
Для моего школьного финального проекта я просто хочу создать Facebook-подобный веб-сайт (социальная сеть).Моя проблема в том, что я хочу создать функцию упоминания на основе имени пользователя (базы данных пользователей).Если в Facebook после того, как я наберу символ @ , система Facebook начнет чаще всего запрашивать друга / страницу с классным отображением списка ajax.Но я не хочу быть таким, в моей системе нет отображения списка ajax.
Если пользователь обновляет статус сообщения с помощью строки, такой как @bias или @tegaralaga или @admin "@tegaralaga, где ты?"для примера.Моя системная проверка базы данных: есть ли пользователь с именем пользователя @tegaralaga, если да, основываясь на user_model.php function get_fullname_by_username (); он вернет user_first_name и user_last_name data.Но если нет, это даст ЛОЖНЫЙ возврат.В моей пользовательской таблице есть пользователь с именем пользователя tegaralaga, имя_пользователя - Bias, а имя_пользователя - Tegaralaga.
Переместиться на post_helper.php , если $ name == FALSE, будет выдана текущая строка, @tegaralaga.Но если имя пользователя существует, оно вернет
"<a href="/profile/{$username}.html">{$name->user_first_name} {$name->user_last_name}</a>"
.
Если существует, строка становится
"<a href="/profile/tegaralaga.html">Bias Tegaralaga</a> where are you?"
Если нет, строка все еще
"@tegaralaga where are you?"
Итак, мой вопрос:1. Возможно ли с моим кодом выше использовать preg_replace_callback?(посмотрите на post_helper.php)2. Если возможно, каков идеальный REGEX, если мы можем упомянуть более одного имени пользователя, и исключение для адреса электронной почты (поскольку адрес электронной почты также содержит символ @)