Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Создание тегов
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Создание тегов

Страниц (1): [1]
 

1. skutor - 12 Февраля, 2012 - 20:32:36 - перейти к сообщению
Есть массив с тегами, типа:
CODE (htmlphp):
скопировать код в буфер обмена
  1. $tagsname
  2. ~~~~~~~~~~~~~~~~~~
  3. array(2) { [0]=> string(4) "тег1" [1]=> string(4) "тег2" }


и есть функция на вход которой приходит идентификатор материала и 1 тег.
CODE (htmlphp):
скопировать код в буфер обмена
  1.     public function tagadd($matid, $tags)
  2.     {
  3.         $url=$_SERVER["HTTP_ORIGIN"];   // определяем доменное имя сайта до первого слеша(http://hello.ru)
  4.         $this->name = Security::xss_clean($tags);        //  в таблицу tags поле name записываем тег
  5.           // проверим заодно введенные теги , чтоб были без скриптов и др гадостей
  6.         $this->url = '';                // ссылка тега изначальна как пустая, поскольку у него еще нету идентификатора
  7.         $this->save();     // записываем в таблицу и получаем идентификатор
  8.         $tagid=$this->id;       // берем данный идентификатор в переменную tagid
  9.         $TagsMaterial = new Model_Tagsmaterial;     //  объявляем класс для работы с бд(нужно для таблицы tags_materials)
  10.         $TagsMaterial->tag_id=$tagid;       // записываем в таблицу tags_materials идентификтаор нашего тега
  11.         $TagsMaterial->material_id = $matid;  // записываем в эту же таблицу идентификатор тега к этому материалу
  12.         $TagsMaterial->save();                  // сохраняем в таблицу
  13.         $tags = ORM::factory('tag', array('id'=>$tagid));       // находим записанную строчку у таблицы tags
  14.         $this->url = "$url/materials/showcontent/$tagid";       //  теперь заполним нашу пустую ссылку ссылкой на идентификтаор материала
  15.         $this->save();                  // произведем сохранение записи
  16.     }


функция создает запись в таблицы tags и tags_material
поля таблицы tags(id(идентификтаор тега, счетчиком),name(наименование тега),url(ссылка на материал))

поля таблицы tags_materials(tags_id(идентификтаор из таблицы tags), material_id(идентификатор материала к тегу))

Вопрос такой: как мне не по 1 тегу на функцию сувать как описано сейчас, а заставить ее обрабатывтаь этот массив описанный в самом вверху.
Чтобы пользователь через запятую теги описал , они разбились на этот массив и как потом этот массив по 1 элементу подать на функцию????
Пробывал через foreach что-то не получилось, может кто-то подскажет..
2. Plusminuz - 12 Февраля, 2012 - 21:11:46 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. foreach ($tagsname as $tag){
  2.  tagadd ($matid, $tag);
  3. };


так?
3. skutor - 12 Февраля, 2012 - 21:14:19 - перейти к сообщению
ну вот так
CODE (htmlphp):
скопировать код в буфер обмена
  1.                 $tag = new Model_Tag;
  2.                 foreach ($tagnames as $tags)
  3.                 {
  4.                 $tag->tagadd($matid, $tags);
  5.                 }
я и пробывал получилось что в tags_material 3 строчки записалось с одинаковыми идентификаторами, а в таблицу tags записалась одна строчка с последним тегом в массиве
4. Plusminuz - 12 Февраля, 2012 - 21:20:03 - перейти к сообщению
я не любитель копаться в чужом коде, но вроде вот это
PHP:
скопировать код в буфер обмена
  1. $this->name = Security::xss_clean($tags);        //  в таблицу tags поле name записываем тег
отвечает у вас за запись тега в таблицу, соответственно здесь и надо колдовать с массивом
5. skutor - 12 Февраля, 2012 - 21:26:22 - перейти к сообщению
Plusminuz пишет:

я не любитель копаться в чужом коде, но вроде вот это
PHP:
скопировать код в буфер обмена
$this->name = Security::xss_clean($tags);        //  в таблицу tags поле name записываем тег
отвечает у вас за запись тега в таблицу, соответственно здесь и надо колдовать с массивом



эта строчка отвечает за запись в поле name
а там 3 поля вообще и сама запись происходит при $this->save();

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

короче говоря он почемуто не сохраняет в поле счетчика(id) в таблице tags несколько раз а сохраняте лишь последний
6. skutor - 13 Февраля, 2012 - 10:32:45 - перейти к сообщению
ау?
7. snikers987 - 13 Февраля, 2012 - 10:34:46 - перейти к сообщению
skutor пишет:
ау?

маугли чтоли?
8. skutor - 13 Февраля, 2012 - 12:34:01 - перейти к сообщению
Разобрался.
Нужно было добавить создание экземпляра класса tags в тело цикла.

 

Powered by ExBB FM 1.0 RC1