Symfony2 — Настройка облака тегов с использованием веса тегов для популярных теговPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Symfony2 — Настройка облака тегов с использованием веса тегов для популярных тегов

Сообщение Anonymous »

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

Теперь я настроил теги как отдельные сущности и связал их с блогом как двунаправленное отношение ManyToMany/ManyToMany.

Излишне говорить, что это не работает, я предполагаю, что это потому, что тег теперь является отдельным объектом.

Мой вопрос: что я делаю неправильно теперь теги являются собственной сущностью, а не строковым свойством сущности блога?

Когда я выгружаю $tagWeights из контроллера ниже, я получаю сообщение об ошибке когда я должен увидеть что-то подобное:

Код: Выделить всё

array (size=78)

'Tag1' => float 1

'Tag2' => float 5

'Tag3' => float 2
ошибка: (эта строка:

Код: Выделить всё

foreach ($tags as $tag) {

$tagWeights[$tag] = (isset($tagWeights[$tag])) ? $tagWeights[$tag] + 1 : 1;

}
ContextErrorException: Предупреждение: недопустимый тип смещения в isset или пустой в /var/www/html/Satori/src/Symfony/AcmeBundle/Entity/TagRepository.php строка 34

Я вызываю теги в twig следующим образом:

Twig< /p>

Код: Выделить всё

{% for tag, weight in tags %}
{{ tag }}
{% else %}
There are no tags
{% endfor %}
Контроллер (сброс $tags отлично работает, показывает все теги)

Код: Выделить всё

public function footerAction()
{
$em = $this->getDoctrine()->getManager();

$tags = $em->getRepository('AcmeBundle:Tag')
->getTags();

$tagWeights = $em->getRepository('AcmeBundle:Tag')
->getTagWeights($tags);
var_dump($tagWeights); die();
return array(
'tags' => $tagWeights,

);
}
Вот getTags и getTagWeights:

Код: Выделить всё

public function getTags()
{
$tags = $this->createQueryBuilder('t')
->select('t.tag')
->getQuery()
->getResult();

return $tags;
}

public function getTagWeights($tags)
{
$tagWeights = array();

if (empty($tags))
return $tagWeights;

foreach ($tags as $tag)
{
$tagWeights[$tag] = (isset($tagWeights[$tag['tag']])) ? $tagWeights[$tag] + 1 : 1;
}

// Shuffle the tags
uksort($tagWeights, function() {
return rand() > rand();
});

$max = max($tagWeights);

// Max of 5 weights
$multiplier = ($max >  5) ? 5 / $max : 1;

foreach ($tagWeights as &$tag)
{
$tag = ceil($tag * $multiplier);
}

return $tagWeights;
}
Объект тега

Код: Выделить всё

class Tag
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var string
*
* @ORM\Column(name="tag", type="string", length=255)
*/
private $tag;

/**
* @ORM\ManyToMany(targetEntity="Blog", mappedBy="tags")
*/
protected $blogs;

public function __construct()
{
$this->blogs = new ArrayCollection();
}

/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* Set tag
*
* @param string $tag
* @return Tag
*/
public function setTag($tag)
{
$this->tag = $tag;

return $this;
}

/**
* Get tag
*
* @return string
*/
public function getTag()
{
return $this->tag;
}

/**
* Add blogs
*
* @param \AcmeBundle\Entity\Blog $blogs
* @return Tag
*/
public function addBlog(\AcmeBundle\Entity\Blog $blogs)
{
$this->blogs[] = $blogs;

return $this;
}

/**
* Remove blogs
*
* @param \AcmeBundle\Entity\Blog $blogs
*/
public function removeBlog(\AcmeBundle\Entity\Blog $blogs)
{
$this->blogs->removeElement($blogs);
}

/**
* Get blogs
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getBlogs()
{
return $this->blogs;
}
}
Предлагаемые решения и результаты

Использование (isset($tagWeights[$tag ['tag']]))
ошибка:

ContextErrorException: предупреждение: недопустимый тип смещения в /var/www/html/Satori/ src/Symfony/AcmeBundle/Entity/TagRepository.php, строка 34

Использование (isset($tagWeights[$tag[$tag->getTag()]))
ошибка:

ContextErrorException: Примечание: попытка получить свойство, не являющееся объектом, в /var/www/html/Satori/src/Symfony/AcmeBundle /Entity/TagRepository.php, строка 34

Подробнее здесь: https://stackoverflow.com/questions/236 ... pular-tags
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Symfony2 — Настройка облака тегов на боковой панели
    Anonymous » » в форуме Php
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Как применить веса HCUP NIS (кластеры, слои и веса) в Python для национальных оценок и анализа PSM?
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как получить ленту популярных постов на Dribbble?
    Anonymous » » в форуме Jquery
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Как получить ограничивающие рамки (BBox) для блоков в конвейере RAG, чтобы выделить 5 самых популярных фрагментов в PDF-
    Anonymous » » в форуме Python
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Symfony2 - доступ к массиву тегов, который имеет значения, выдает ошибку
    Anonymous » » в форуме Php
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Php»