  An $(r, \delta)$-locally repairable code ($(r, \delta)$-LRC for short) was
introduced by Prakash et al. \cite{Prakash2012} for tolerating multiple failed
nodes in distributed storage systems, which was a generalization of the concept
of $r$-LRCs produced by Gopalan et al. \cite{Gopalan2012}. An $(r, \delta)$-LRC
is said to be optimal if it achieves the Singleton-like bound. Recently, Chen
et al. \cite{Chen2018} generalized the construction of cyclic $r$-LRCs proposed
by Tamo et al. \cite{Tamo2015,Tamo2016} and constructed several classes of
optimal $(r, \delta)$-LRCs of length $n$ for $n\, |\, (q-1)$ or $n\,|\, (q+1)$,
respectively in terms of a union of the set of zeros controlling the minimum
distance and the set of zeros ensuring the locality. Following the work of
\cite{Chen2018,Chen2019}, this paper first characterizes $(r, \delta)$-locality
of a cyclic code via its zeros. Then we construct several classes of optimal
cyclic $(r, \delta)$-LRCs of length $n$ for $n\, |\, (q-1)$ or $n\,|\, (q+1)$,
respectively from the product of two sets of zeros. Our constructions include
all optimal cyclic $(r,\delta)$-LRCs proposed in \cite{Chen2018,Chen2019}, and
our method seems more convenient to obtain optimal cyclic $(r, \delta)$-LRCs
with flexible parameters. Moreover, many optimal cyclic $(r,\delta)$-LRCs of
length $n$ for $n\, |\, (q-1)$ or $n\,|\, (q+1)$, respectively such that
$(r+\delta-1)\nmid n$ can be obtained from our method.
